每个循环中的Handlebars动态属性查找

时间:2015-04-28 20:30:11

标签: handlebars.js

在Handlebars 2+中,如何在这样的循环中动态读取属性? objects是一个对象数组。 keys是一个字符串数组。我想循环每个对象的每个键,并将其.foo值放在span中。

{{#each objects}}
    {{#each keys}}
        <span>{{../this.{{this}}.foo}}</span>
    {{/each}}
{{/each}}

普通车把2+可以吗?或者......有helper这样做吗?

3 个答案:

答案 0 :(得分:7)

如果没有助手,我怎么看不出怎么办呢 有了帮助者,Handlebars中的一切都是可能的(但有点丑陋)。

例如,您可以使用以下内容:

{{#each objects}}
    {{#each keys}}
        <span>{{lookupProp ../this this 'foo'}}</span>
    {{/each}}
{{/each}}

帮助者:

Handlebars.registerHelper('lookupProp', function (obj, key, prop) {
   return obj[key] && obj[key][prop];
});

查看fiddle

自3.0.3版以来,句柄内置了lookup helper

答案 1 :(得分:1)

好的...花了几个小时在谷歌上搜索并找到一个很好的解决方案,因为我遇到了同样的问题,但未找到任何问题......

我和Larry一样高兴,当我终于找到了解决这个问题的方法时,我跳下了椅子:D

这样,您可以使用动态密钥访问对象值

演示对象:

var categories = {
    onion: { name: 'bar', id: 4 }, 
    apple: { name: 'demo', id: 2 }, 
    carrot: { name: 'foo', id: 3 }, 
    Root: [
        { name: 'apple' },
        { name: 'onion' },
        { name: 'carrot' }
    ]
};

而不是尝试这样的事情:(它不会起作用)

{{#each categories.[@key]}} 
or
{{#each categories.[mykey]}}

你可以这样做:

{{#each categories.[Root] as |main-category|}}

    {{#each (lookup ../categories main-category.name) as |sub-category|}}

        {{sub-category.name}}

    {{/each}}

{{/each}}

希望它对其他人也有帮助:)。

答案 2 :(得分:1)

对于其他不想循环的人,可以使用with例如

{{#with (lookup myObject myKeyVar) as |subObject|}}
  {{subObject.key}}
{{/with}}