Как определить функцию глобального шаблона?
Во многих шаблонах я хочу использовать одни и те же функции, но они должны определяться в каждом шаблоне.
например:
function getNodesById(id){
return collection.find({sid:id}).fetch();
}
Template.navigation.getNodesById= function(id){
return getNodesById(id);
}
Template.body.getNodesById= function(id){
return getNodesById(id);
}
Html:
<Template name="navigation">
...
{{#each getNodesById '1'}}
...
{{/each}}
...
</Template>
<Template name="body">
...
{{#each getNodesById '1'}}
...
{{/each}}
...
</Template>
...
<Template name="...">
.....
</Template>
Есть ли способ определить функцию шаблона globle вместо шаблона? просто нравится:
В javascript:
defined global tempele.functionA = function(...){
return ...
}
в html:
<Template name ="a">
{{#each functionA ...}}
{{/each }}
</Template>
<Template name ="b">
{{#each functionA ...}}
{{/each }}
</Template>
<Template name="...">
{{ #.. functionA ...}}
....
{{/...}}
</Template >
Могу ли я это сделать? Надеюсь, я четко описал проблему.
Ответы
Ответ 1
Вы можете напрямую зарегистрировать своих помощников с ручками. Это то, что я использую для отображения текущего адреса электронной почты пользователей:
Handlebars.registerHelper('currentUserName', function () {
var user = Meteor.user();
if (_.isUndefined(user) || _.isNull(user)) {
return new Handlebars.SafeString("<i class='icon-spin icon-spinner'></i> Login");
}
return user.emails[0].address;
});
В любом шаблоне я просто вызываю {{currentUserName}}
. Для вас это будет
Handlebars.registerHelper('getNodeById', function (id) {
return collection.find({sid:id}).fetch();
});
В качестве побочного примечания: глядя на то, как вы хотите его использовать, вы, возможно, неправильно поняли идею Мететера. Meteor управляется данными - не пытайтесь применять управляемые потоком парадигмы. Если вам не хватает данных в ваших шаблонах, вы должны изменить источник данных, а не просто извлекать их в своих шаблонах.
Ответ 2
Как и в случае с Meteor 1.0, документация здесь дает разработчикам возможность использовать Template.registerHelper
, чтобы определить глобально доступные сменщики шаблонов.
Таким образом, в случае этого вопроса правильный формат кода будет следующим:
Template.registerHelper("getNodesById", function(id) {
return collection.find({sid: id});
}
Затем вы можете ссылаться на этот помощник шаблона в любом из ваших шаблонов двумя способами:
{{getNodesById '1'}}
или
{{#each getNodesById '1'}}
...
{{/each}}
Ответ 3
Для Meteor 0.8 или выше использование UI.registerHelper
выполнит задание.