2012-04-23 4 views
3

StockPartition (해당 속성은 partitions이라는 배열)이라는 Stock 모델이 있다고 가정합니다.Ember.Array에서 중첩 된 속성을 관찰하는 방법

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 

Stockpartitions.amount을 수를 관찰하는 방법? I는 다음과 같습니다 함수 addPartition 작성할 수 있습니다

addPartition: function(partition) { 
    partition.addObserver('amount', function() { 
    this.get('owner').notifyPropertyChange('usedAmount'); 
    }); 
} 

을하지만 더 나은 솔루션이 있기를 바랍니다.

답변

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

reducedocs에 설명되어 있습니다.

+0

그것은 매력처럼 작동하며 정말 더 훌륭하게 끝났습니다! – louiscoquio

+0

예,'Ember.Enumerable'은 이러한 종류의 일반적인 작업을 위해 아주 좋은 방법을 제공합니다. – pangratz

관련 문제