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

Ember.js 基于字符串列表绑定到模板中的模型,ember.js,Ember.js,在我的控制器中,我有如下字符串列表: columns : ['name', 'description'] 我想根据以下列表筛选模板中显示的内容: {{#each m in controller.model}} {{#each col in controller.columns}} <td>{{m[col]}}</td> {{/each}} {{/each}}

在我的控制器中,我有如下字符串列表:

columns : ['name', 'description']
我想根据以下列表筛选模板中显示的内容:

        {{#each m in controller.model}}
            {{#each col in controller.columns}}
               <td>{{m[col]}}</td>
            {{/each}}
        {{/each}}
{{{#controller.model中的每个m}
{{{#controller.columns中的每个col}
{{m[col]}
{{/每个}}
{{/每个}}
当然,
{{m[col]}
不是有效的代码,但是你明白了。我怎样才能做到这一点


这段代码是通用代码,因此我无法告诉您columns数组包含哪些内容。

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

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}}
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}')
});
{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td>{{get-property model=item method=col}}</td>
    {{/each}}
  </tr>
{{/each}}
然后,您可以在模板中使用它,如下所示:

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}}
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}')
});
{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td>{{get-property model=item method=col}}</td>
    {{/each}}
  </tr>
{{/each}}
{{{#模型中的每个项目}
{{#列中的每个列}}
{{dd item col}}
{{/每个}}
{{/每个}}

jsbin上的工作示例如果希望将数据绑定到模板,以便在数据更改时更新,请使用如下小组件:

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}}
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}')
});
{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td>{{get-property model=item method=col}}</td>
    {{/each}}
  </tr>
{{/each}}
请注意,必须手动指定要绑定到的每个属性

组件模板:

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

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}}
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}')
});
{{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td>{{get-property model=item method=col}}</td>
    {{/each}}
  </tr>
{{/each}}
{{{#模型中的每个项目}
{{#列中的每个列}}
{{get property model=item method=col}}
{{/每个}}
{{/每个}}
如果我使用Ember.set()更改某个项目属性的值,则该更改不会显示在模板中,因为项目属性不受帮助者的约束。我如何才能使其工作,以便更改数据更新模板?