Handlebars通过属性名称动态显示对象属性

时间:2018-02-28 10:09:04

标签: javascript ember.js handlebars.js ember-data

{{#each modelItems as |item|}}
<tr>
    <td>
        {{ item.name }}
    </td>
    {{#each selectedColumns as |extraCol|}} // line 27
        <td>
            {{ extraCol }}
            {{ item[concat '"' extraCols '"'] }} // what I tried
            {{ item[(concat '"' extraCols '"')] }}
        </td>
    {{/each}}
</tr>
{{/each}}

在模板中,我有一个modelItems列表。在表格中显示了某些列,但selectedColumns列表中也可能包含可选列。 作为第27行,我循环遍历selectedColumns以显示它们但没有运气。 Handlebars如何通过属性名称动态显示对象属性?


在JS中它就像

foreach (items in selectedColumns) {
    console.log(item.name);
    foreach (column in selectedColumns) {
        console.log(item['"'+column+'"']);
    }
}

2 个答案:

答案 0 :(得分:2)

使用get帮助程序,您可以动态访问对象的属性。如果将其与subexpressions把手结合使用,您仍然可以使用concat助手。

您的代码看起来像:

{{#each modelItems as |item|}}
<tr>
    <td>
        {{ item.name }}
    </td>
    {{#each selectedColumns as |extraCol|}}
        <td>
            {{get item (concat '"' extraCol  '"')}}
        </td>
    {{/each}}
</tr>
{{/each}}

答案 1 :(得分:1)

在把手{{内部,您无法编写JS代码,因此您无法使用[]访问集合中的项目。而是编写一个帮助程序,它返回所选的项目。

我写了一个例子here