在Handlebars 2+中,如何在这样的循环中动态读取属性? objects
是一个对象数组。 keys
是一个字符串数组。我想循环每个对象的每个键,并将其.foo
值放在span
中。
{{#each objects}}
{{#each keys}}
<span>{{../this.{{this}}.foo}}</span>
{{/each}}
{{/each}}
普通车把2+可以吗?或者......有helper这样做吗?
答案 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}}