Handlebars.js - 全球上下文

时间:2013-09-17 17:19:27

标签: javascript handlebars.js

假设我的应用程序中的某个静态用户列表缓存在App.Users。我可能需要在我的应用程序中的几十个地方列出我的用户。按照惯例,我只需要将我的上下文列表传递给模板。

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

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

但是这种方法需要在模板和javascript中进行一些连接。我想做的是单独在模板中指定这个,所以我不需要在我的脚本中记住这一点。考虑这样的事情......

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

... users是一个只返回App.Users的辅助函数。那不是很好吗?

所以完全不编译。另一种解决方案是什么?

1 个答案:

答案 0 :(得分: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}}