2013-07-01 2 views
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) 

ответ

2

Я думаю, вычисленное свойство percentValue принадлежит в Ember.ArrayController, где у вас есть доступ к @each.

1

У вас есть ошибка в выражении иждивенцев собственности: Вы должны иметь [email protected], не @each.items.length

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

Вы также могли бы улучшить свои код:

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

может быть написано:

this.get('items.length') 

Последние, чтобы вставить новый элемент отношения, вы должны позвонить createRecord непосредственно на items отношений, которые упростят & избежать pushObject вызова.

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

Кажется, что 'items.each' отмечает только элементы одной категории, а не всех категорий. Я хочу, чтобы, если треки CategoryA меняются, тогда необходимо также обновить значение процентаValue CategoryB. Большое спасибо за другие советы :) –

+0

Действительно, 'предметы. @ Each' будут наблюдать только за категориями. Вы пробовали 'App.Item.all.length' или' @ each.items. @ Each'? –

+0

да, обе не делаем :( –

Смежные вопросы