假设我的模型Stock
有多个StockPartition
(它的属性名为partitions
,它是一个数组)。
Stock
模型有一个属性usedAmount
,当所有partition.amount
中的任何一个发生更改时都应该更改,当然,在添加/删除分区时会更新。{/ p >
示例:
stock.get('usedAmount') -> 0
stock.get('partitions') -> [Class, Class, Class]
stock.get('partitions')[0].set('amount', 12)
stock.get('usedAmount') -> I want here to return 12
stock.get('partitions')[1].set('amount', 12)
stock.get('usedAmount') -> I want here 24
Stock
如何观察每个partitions.amount
?
我可以编写一个看起来像这样的函数addPartition
:
addPartition: function(partition) {
partition.addObserver('amount', function() {
this.get('owner').notifyPropertyChange('usedAmount');
});
}
但我希望有更好的解决方案。
答案 0 :(得分:4)
我会使用强大的计算属性。您也可以使用Ember.Enumerable
上提供的有用方法,请参阅http://jsfiddle.net/pangratz666/BxyY4/:
App.partitionsController = Ember.ArrayProxy.create({
content: [],
addPartition: function(amount) {
this.pushObject(Ember.Object.create({
amount: amount
}));
},
usedAmount: function() {
// reduce by adding all 'amount' values, start with initial value 0
return this.reduce(function(previousValue, item) {
return previousValue + item.get('amount');
}, 0);
}.property('@each.amount')
});
reduce
中记录了{{1}}。