3

StockいくつかのモデルがあるとStockPartitionします(そのプロパティはpartitions、その配列と呼ばれます)。

Stockモデルには、usedAmountすべての変更のいずれかが変更されたときに変更する必要があるプロパティがあります。partition.amountもちろん、パーティションが追加/削除されたときに更新されます。

例 :

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

しかし、もっと良い解決策があることを願っています。

4

1 に答える 1

4

強力な計算プロパティを利用します。また、便利なメソッドを使用できるようにすることもできます 。http ://jsfiddle.net/pangratz666/BxyY4/Ember.Enumerableを参照してください。

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ドキュメントに記載されています

于 2012-04-23T18:23:10.490 に答える