2013-07-01 63 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

是的,都不这样做:( –