Javascript EmberJS-通过模板中的任意键访问对象的属性,并使用HTMLBars绑定这些属性?

Javascript EmberJS-通过模板中的任意键访问对象的属性,并使用HTMLBars绑定这些属性?,javascript,ember.js,Javascript,Ember.js,有了车把,我可以做到: <script type="text/x-handlebars" data-template-name="index"> <table> {{#each model as |item index|}} <tr {{action 'update' index}}> {{#each col in columns}} <td>{{dd item col}}</td>

有了车把,我可以做到:

<script type="text/x-handlebars" data-template-name="index">
  <table>
  {{#each model as |item index|}}
    <tr {{action 'update' index}}>
      {{#each col in columns}}
        <td>{{dd item col}}</td>
      {{/each}}
    </tr>
  {{/each}}
  </table>
</script>

App = Ember.Application.create();

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return [
      { name: "Joe", description: "Good guy", age: 15 },
      { name: "Moe", description: "Bad guy", age: 25 },
      { name: "Dude", description: "Some other guy", age: 65 }
    ];
  }
});

App.IndexController = Ember.ArrayController.extend({
  columns : ['age', 'name', 'description'],
  actions: {
    update: function(index) {
      var item = this.get('model')[index];
      Ember.set(item, 'age', 10);
    }
  }
});

Ember.Handlebars.registerBoundHelper('dd', function(item, column) {
  return item[column];
}, 'age', 'name', 'description');

那么,我如何通过模板中的任意键访问对象的属性,并使用HTMLBars绑定这些属性呢?

我创建了一个提供此功能的插件

它最近在核心的Ember代码中被采用,因此在即将发布的版本中,您将不再需要安装该插件。。有关详细信息,请参阅


对于更高级的helper,它可以重新计算helper的输入以外的内容,有一个方法可以解决这个问题。密切关注它。

我创建了一个提供此功能的插件

它最近在核心的Ember代码中被采用,因此在即将发布的版本中,您将不再需要安装该插件。。有关详细信息,请参阅


对于更高级的helper,它可以重新计算helper的输入以外的内容,有一个方法可以解决这个问题。注意一下。

我意识到这是一个相对较好的选择:

<script type="text/x-handlebars" data-template-name="index">
  <table>
  {{#each model as |item index|}}
    <tr {{action 'update' index}}>
      {{#each col in columns}}
        <td>{{get-property model=item method=col}}</td>
      {{/each}}
    </tr>
  {{/each}}
  </table>
</script>

<script type="text/x-handlebars" data-template-name="components/get-property">
  {{value}}
</script>

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

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

        return model[method].toString().toUpperCase();

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

{{{#每个模型作为|项索引}
{{#列中的每个列}}
{{get property model=item method=col}}
{{/每个}}
{{/每个}}
{{value}}
App.getPropertyComponent=Ember.Component.extend({
标记名:“”,
值:函数(){
var model=this.get('model');
var method=this.get('method');
返回模型[method].toString().toUpperCase();
}.property('model.{age,name,description}'))
});

我意识到这是一个相对较好的选择:

<script type="text/x-handlebars" data-template-name="index">
  <table>
  {{#each model as |item index|}}
    <tr {{action 'update' index}}>
      {{#each col in columns}}
        <td>{{get-property model=item method=col}}</td>
      {{/each}}
    </tr>
  {{/each}}
  </table>
</script>

<script type="text/x-handlebars" data-template-name="components/get-property">
  {{value}}
</script>

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

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

        return model[method].toString().toUpperCase();

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

{{{#每个模型作为|项索引}
{{#列中的每个列}}
{{get property model=item method=col}}
{{/每个}}
{{/每个}}
{{value}}
App.getPropertyComponent=Ember.Component.extend({
标记名:“”,
值:函数(){
var model=this.get('model');
var method=this.get('method');
返回模型[method].toString().toUpperCase();
}.property('model.{age,name,description}'))
});

这太棒了,它看起来像是灰烬模板中的一个大洞,所以我很感谢您修复了它。该插件是否适用于Ember 1.11.3?尽管如此,我仍然认为需要有一种方法来使用标准帮助器实现这一点,因为在返回用于在模板中呈现的密钥之前,可能需要根据密钥更改数据。或者我应该先使用视图或组件来修改数据?这太棒了,它看起来像是灰烬模板中的一个大洞,所以我很感谢你修复了它。该插件是否适用于Ember 1.11.3?尽管如此,我仍然认为需要有一种方法来使用标准帮助器实现这一点,因为在返回用于在模板中呈现的密钥之前,可能需要根据密钥更改数据。还是应该先使用视图或组件来更改数据?