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

rya*_*nve 6 handlebars.js

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

{{#each objects}}
    {{#each keys}}
        <span>{{../this.{{this}}.foo}}</span>
    {{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

普通车把2+有可能吗?或者......有帮助吗?

rai*_*dev 7

没有助手,我没有看到如何做到这一点.
有了帮助者,Handlebars中的一切都是可能的(但有点难看).

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

{{#each objects}}
    {{#each keys}}
        <span>{{lookupProp ../this this 'foo'}}</span>
    {{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

和帮手:

Handlebars.registerHelper('lookupProp', function (obj, key, prop) {
   return obj[key] && obj[key][prop];
});
Run Code Online (Sandbox Code Playgroud)

看看小提琴.

自3.0.3版以来,Handlebars内置了lookup 助手.


小智 6

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

我和 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' }
    ]
};
Run Code Online (Sandbox Code Playgroud)

而不是尝试这样的事情:(这是行不通的)

{{#each categories.[@key]}} 
or
{{#each categories.[mykey]}}
Run Code Online (Sandbox Code Playgroud)

你可以做:

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

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

        {{sub-category.name}}

    {{/each}}

{{/each}}
Run Code Online (Sandbox Code Playgroud)

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


Ger*_*amo 5

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

{{#with (lookup myObject myKeyVar) as |subObject|}}
  {{subObject.key}}
{{/with}}
Run Code Online (Sandbox Code Playgroud)