0

聚合计算属性未在 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'),
});

这个东西第一次工作,但是每当数组元素更新时,属性观察者永远不会被第二次调用。

4

1 回答 1

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

希望能帮助到你

于 2013-05-08T11:25:14.770 回答