2013-09-17 2 views
3

Скажем, у меня есть статический список пользователей, кэшированных где-то в моем приложении, например App.Users. Вероятно, мне нужно будет перечислить моих пользователей в нескольких десятках мест в моем приложении. Обычно мне просто нужно передать мой список с моим контекстом в шаблон.Handlebars.js - Глобальные контексты

var tmpl = Handlebars.templates['TemplateName']; 

var html = tmpl({ 
    model: model, 
    users: App.Users 
}); 

Но этот подход требует некоторой проводки как в шаблоне, так и в javascript. То, что я хотел бы сделать, это указать это только в шаблоне, поэтому мне не нужно помнить об этом в моих сценариях. Рассмотрим что-то вроде этого ...

{{#each {{users}}}} 
    <li> ... </li> 
{{/each}} 

... Где users это вспомогательная функция, которая просто возвращает свой App.Users. Разве это не было бы хорошо?

Так что полностью не компилируется. Какое еще решение?

+0

возможно дубликат [Глобальные переменные в Рули, если блоки] (http://stackoverflow.com/questions/11790507/global-variables-in -handlebars-if-blocks) – Mathletics

+0

Сообщите мне, если это не то, что вы имели в виду, но это похоже на тот же вопрос. – Mathletics

ответ

7

Пошел с абстрактной функцией вспомогательных функций ..., которая будет честной, кажется, является решением 99% вопросов Handlebars.

Handlebars.registerHelper('global', function(context, options) { 
    return options.fn(App.[context].toJSON()); // Object is Backbone Collection 
}) 

И используется в качестве примера ...

{{#global "Users"}} 
    {{#each this}} 
     <th>{{Name}}</th> 
    {{/each}} 
{{/global}} 
Смежные вопросы