Handlebars在#each中的不同对象中的一般上下文对象中到达键值对

时间:2014-05-28 09:44:19

标签: javascript localization handlebars.js

我有一个Handlebars使用的模板和我的上下文,如下所示:

var context = {
    abc: ["a","b","c","d"],
    xyz: {
         words: {
             a: 1,
             b: 2,
             c: 3,
             d: 4
         }
    }
}
var template = Handlebars.compile(tpl);
var output = template(context);

到此为止一切都很好。但我需要做一些事情:

{{#each abc }}
 <li><a data-toggle="tab" href="#{{ ../xyz.words[this] }}"> {{ this }} </a></li>
{{/each }}

我希望在xyz.words上下文中收集key给出的值,但我什么都没得到。相反,如果我只使用{{ this }},它可以正常工作并从abc返回一个值。

我在这里缺少什么?

编辑:

顺便说一句,我试图使用助手,这就是我所做的:

Handlebars.registerHelper("whatis", function(key){
       return  xyz.words[key];
    });

{{#each abc }}
 <li><a data-toggle="tab" href="#{{ whatis this] }}"> {{ this }} </a></li>
{{/each }}

1 个答案:

答案 0 :(得分:1)

您需要创建一个帮助程序,以便使用基于变量的动态键(running example)来访问该对象:

模板:

{{#each abc }}
 <li> 
     {{#getObjectValue ../xyz.words key=this}}
     <a data-toggle="tab" href="#{{this}}">
     {{/getObjectValue}}
     {{ this }} </a>
 </li>
{{/each }}

代码:

Handlebars.registerHelper('getObjectValue', function(object, options) {
    return options.fn(object[options.hash.key]);
});
var template = Handlebars.compile($("#template").html());
$("#target").html(template(context));