聚合的Computed属性未在ember中更新
Val.set('arr',[]);
Val.set('arr',[{val:1},],[{val:2}],[{val:3}],[{val:4}]);
Val.reopen({
total:function(){
var array=this.get('arr');
var total=0;
for(i=0;i<array.length;i++)
{
total=total+array[i].val
}
return total;
}.property('arr.@each'),
});
这个东西第一次起作用,但是只要数组元素被更新,属性观察者就不会第二次被调用。
答案 0 :(得分:0)
如果你想观察数组中对象的属性,那么你在这里遗漏了一些东西:
...
}.property('arr.@each')
尝试将您的代码更改为此
...
}.property('arr.@each.val')
否则ember只会注意到数组本身的更改(删除/添加元素),而不会更改数组中这些对象的属性。
不是答案的一部分,但作为灵感,您可以使用内置的reduce方法更方便地完成整个方法:
Val.reopen({
total:function(){
var total = this.get('arr').reduce(function(a, b) {
return a.val + b.val;
});
return total;
}
});
希望有所帮助