2013-07-01 91 views
2

我想觀察模型的每個實例的更改。考慮到這個小例子,當一個類別的項目數量發生變化時,百分比值應該改變爲每個其他類別。在這個例子中它不會更新PERCENTVALUE:所有實例上的模型實例dependend的計算屬性

App.Category = DS.Model.extend({ 
    name:  DS.attr('string'), 
    items:  DS.hasMany('App.Item'), 
    percentValue: function() { 
    var total_items = App.Item.all().get('length') 
    var category_items = this.get('items').get('length') 

    return total_items == 0 ? 0 : (100 * category_items/total_items).toFixed() 
    }.property('@each.items.length') 
}) 

App.Item = DS.Model.extend({ 
    name:   DS.attr('string'), 
}) 

category = App.Category.createRecord({name: 'Category1'}) 
item = App.Item.createRecord({name: 'Item1'}) 

category.get('items').pushObject(item) 

回答

2

我認爲在Ember.ArrayController,你必須訪問@eachpercentValue所屬的計算性能。

1

你必須在屬性依賴性表達了一個錯誤:你應該有[email protected],不@each.items.length

... 
}.property('[email protected]') 

你也可以提高你的代碼:

this.get('items').get('length') 

可寫爲:

this.get('items.length') 

末,插入一個新的關係成員,你應該直接調用createRecorditems關係,這將簡化&避免pushObject電話。

category.get('items').createRecord({ name: 'Item1' }) 
+0

似乎'items.each'只能觀察一個類別的項目,而不是所有類別的項目。我希望如果CategoryA的曲目發生變化,那麼CategoryB的percentValue也應該更新。非常感謝其他提示:) –

+0

確實,'items。@ each'只會觀察類別的項目。你嘗試過'App.Item.all.length'還是'@ each.items。@ each'? –

+0

是的,都不這樣做:( –