基于字符串列表绑定到模板中的模型

时间:2014-12-15 03:58:47

标签: ember.js

在我的控制器中,我有一个像这样的字符串列表:

columns : ['name', 'description']

我想基于此列表过滤模板中显示的内容:

        {{#each m in controller.model}}
            {{#each col in controller.columns}}
               <td>{{m[col]}}</td>
            {{/each}}
        {{/each}}

当然{{m[col]}}不是有效代码,但您明白了。我怎么能实现这个目标?

这段代码是通用的,所以我无法预先知道列数组包含的内容。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式创建绑定助手:

Ember.Handlebars.registerBoundHelper('dd', function(rowData, col) {
  return rowData[col];
});

然后,您可以在模板中使用它,如下所示:

{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td> {{ dd item col }} </td>
    {{/each}}
  </tr>
{{/each}}

jsbin上的工作示例here

答案 1 :(得分:0)

如果您希望数据绑定到模板以便在数据更改时更新,请使用以下小组件:

App.getPropertyComponent = Ember.Component.extend({
    tagName: '',

    value: function() {
        var model = this.get('model');
        var method = this.get('method');

        return model[method];

    }.property('model.{name,description}')
});

请注意,您必须手动指定要绑定的每个属性。

组件模板:

{{value}}

然后,您可以在模板中使用它,如下所示:

{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td>{{get-property model=item method=col}}</td>
    {{/each}}
  </tr>
{{/each}}