Как определить функцию глобального шаблона?

Во многих шаблонах я хочу использовать одни и те же функции, но они должны определяться в каждом шаблоне. например:

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 выполнит задание.