2

我想观察模型每个实例的变化。鉴于这个小例子,当一个类别的项目数量发生变化时,百分比值应该为每个其他类别发生变化。在此示例中,它不会更新 percentValue:

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)
4

2 回答 2

2

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

于 2013-07-25T07:33:42.547 回答
1

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

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

您还可以改进您的代码:

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

可以写成:

this.get('items.length')

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

category.get('items').createRecord({ name: 'Item1' })
于 2013-07-01T08:36:20.597 回答