聚合的Computed属性未在ember中更新

时间:2013-05-08 11:08:53

标签: ember.js

聚合的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'),
});

这个东西第一次起作用,但是只要数组元素被更新,属性观察者就不会第二次被调用。

1 个答案:

答案 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;
   }
 });

希望有所帮助