2

我们的模型中有一系列链式计算属性,如下所示:

App.MyModel = Em.Object.extend({
  value0: 2
  value1: 5,
  value2: function() {
    return this.get('value1') + this.get('value0');
  }.property('value1', 'value0'),
  value3: function() {
    return this.get('value2') * this.get('value0');
  }.property('value2', 'value0')
});

我们现在希望将value0属性绑定到 ArrayController 中的值。完成此任务的最正确方法是什么?

这是我们现在使用的方法:

App.MyController = Em.ArrayController.extend({
  value0: function(key, value) {
    if (arguments.length > 1) {
      this.setEach('value0', value);
    }
    return this.get('firstObject.value0');
  }.property('firstObject.value0')
});

需要在每个对象上设置属性感觉很混乱。有没有更好的办法?

编辑:

我们一直在尝试的另一种方法是定义一个call车把助手,它允许这样的事情:

{{#each controller}}
   <li>{{call someModelMethod someControllerProperty}}</li>
{{/each}}

然后模型看起来像这样:

App.MyModel = Em.Object.extend({
  value1: 5,
  someModelMethod: function(value0) {
    return this.get('value1') * value0;
  }
});

这对我来说感觉更好,想法?

4

0 回答 0