我有一个Ember模型,有多个hasMany关系。
App.Game = DS.Model.extend({
drawnNumbers: DS.attr(),
cards: DS.hasMany('card', {async: true}),
winners: DS.hasMany('winner'),
});
drawnNumbers是一个带有绘制数字的数组。当游戏正在播放时,该阵列每隔几秒更新一次。 我的游戏控制器看起来像这样:
drawnNumbers: function () {
var drawnNumbers, lastNumber;
drawnNumbers = this.get('model.drawnNumbers');
lastNumber = drawnNumbers[drawnNumbers.length - 1];
$("#h-cards td.number[data-number='" + lastNumber + "']").addClass('marked');
$("#h-drawn-numbers .number[data-number='" + lastNumber + "']").addClass('active');
}.observes('model.drawnNumbers'),
ownCards: function () {
var gameId, userId;
gameId = this.get('id');
userId = this.get('session.content').id;
console.log("rerendering cards");
return this.get('store').filter('card', function (card) {
return (card.get('game.id') === gameId && card.get('user.id') === userId);
});
}.property('model.cards'),
我的问题是每当drawingNumbers属性被更改时,我的所有卡片都被过滤并重新渲染。这导致了巨大的滞后,因为每场比赛都有数百张牌。
有没有有效的方法来解决这个问题?
答案 0 :(得分:0)
您不会过滤与您的型号相关联的卡片,而是过滤商店中的所有卡片。因此,我怀疑某些事情要么为您的游戏添加新卡,要么将新卡添加到商店。
您的ownCards
计算属性可能是cards
关联的简单过滤器。
ownCards: Ember.computed.filter('cards', function(card) {
return card.get('user.id') === this.get('session.content.id');
})
使用观察者并使用jquery手动添加drawnNumbers
中的类并不是一个惯用的。您可能应该利用项目控制器来绑定类