我们的模型中有一系列链式计算属性,如下所示:
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;
}
});
这对我来说感觉更好,想法?