Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 依赖于所有实例的模型实例的计算属性_Ember.js_Ember Data - Fatal编程技术网

Ember.js 依赖于所有实例的模型实例的计算属性

Ember.js 依赖于所有实例的模型实例的计算属性,ember.js,ember-data,Ember.js,Ember Data,我希望观察模型的每个实例的变化。举个小例子,当一个类别的项目数发生变化时,其他类别的百分比值也会发生变化。在本例中,它不会更新百分比值: App.Category = DS.Model.extend({ name: DS.attr('string'), items: DS.hasMany('App.Item'), percentValue: function() { var total_items = App.Item.all().get('leng

我希望观察模型的每个实例的变化。举个小例子,当一个类别的项目数发生变化时,其他类别的百分比值也会发生变化。在本例中,它不会更新百分比值:

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)

属性依赖项表达式中有一个错误:应该有
项。@each
,而不是
@each.items.length

...
}.property('items.@each')

您还可以改进代码:

this.get('items').get('length')
可以这样写:

this.get('items.length')

最后,要插入一个新的关系成员,您应该直接在
items
关系上调用
createRecord
,这将简化并避免调用
pushObject

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

我认为计算属性
percentValue
属于
Ember.ArrayController
,您可以访问
@each

似乎
项。每个
只观察一个类别的项,而不是所有类别的项。我希望如果CategoryA的轨迹发生变化,那么CategoryB的percentValue也应该更新。非常感谢其他提示:)事实上,
项目。@每个
只会观察类别的项目。您是否尝试过
App.Item.all.length
@each.items.@each