2013-03-11 2 views
10

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

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 > 

Могу ли я сделать это? Надеюсь, я четко описал проблему.

ответ

14

Вы можете зарегистрировать своих помощников с рулями напрямую. Это то, что я использую для отображения адреса электронной почты текущих пользователей'S:

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 управляется данными - не пытайтесь применять управляемые потоком парадигмы. Если вам не хватает данных в ваших шаблонах, вы должны изменить источник данных, а не просто извлекать их в своих шаблонах.

+0

Спасибо за ваш напоминаю, я думаю, что я был неправ в start.Meteor является управляемыми данными, я Kee p что в виду. Спасибо! –

3

Для Meteor 0.8 или выше, используя UI.registerHelper, выполнит эту работу.

13

В соответствии с Meteor 1.0 документация here дает разработчикам возможность использовать Template.registerHelper, чтобы определить глобальные доступные шаблонные помощники.

Таким образом, в случае этого вопроса, правильный формат кода будет таким:

Template.registerHelper("getNodesById", function(id) { 
     return collection.find({sid: id}); 
    } 

Затем можно ссылаться на этот шаблон помощника в любом из ваших шаблонов в следующих двух способов:

{{getNodesById '1'}} 

или

{{#each getNodesById '1'}} 
     ... 
    {{/each}} 
Смежные вопросы