2013-02-13 4 views
3

У меня есть простой DataModel:Ember данные вычислены свойство не работает на вложенной ассоциации

окорока, есть много игроков, которые имеют много Оборотов:

App.Store = DS.Store.extend({ 
    revision: 11, 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Leg = DS.Model.extend({ 
    players: DS.hasMany('App.Player'), 
    turnCount: function() { 
    var i = 0; 
    this.get('players').forEach(function(p) { 
     i+= p.get('turns.length'); 
    }); 
    return i; 
    }.property('[email protected]') 

}); 

App.Player = DS.Model.extend({ 
    leg: DS.belongsTo('App.Leg'), 
    turns: DS.hasMany('App.Turn') 
}); 


App.Turn = DS.Model.extend({ 
    player: DS.belongsTo('App.Player') 
}); 

Вычисленное свойство turnCount автоматически не получает обновляется, когда я создаю новый поворот, но он должен, правильно?

/* 
* do this on the console to verify 
*/ 

var leg = App.Leg.createRecord(); 
var player = leg.get('players').createRecord(); 

leg.get('turnCount'); 
// => 0 
player.get('turns').createRecord(); 
leg.get('turnCount') 
// => 0 

UPDATE

Кажется, что если вы будете придерживаться одного слоя гнездовых вещей просто работать. Таким образом:

.property('[email protected]') 

работает, пока этот SomeProperty не является Перечислимым.

ответ

0

Попробуйте это:

.property('[email protected]@each') 

Вы также можете использовать метод reduce для расчета суммы:

turnCount: function() { 
    return this.get('players').reduce(function(value, player) { 
    return value + player.get('turns.length'); 
    }, 0); 
}.property('[email protected]@each') 
Смежные вопросы