Ember Model获得一次更新,但所有关联也会重新加载?

时间:2014-04-23 17:47:44

标签: ember.js

我有一个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属性被更改时,我的所有卡片都被过滤并重新渲染。这导致了巨大的滞后,因为每场比赛都有数百张牌。

有没有有效的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您不会过滤与您的型号相关联的卡片,而是过滤商店中的所有卡片。因此,我怀疑某些事情要么为您的游戏添加新卡,要么将新卡添加到商店。

您的ownCards计算属性可能是cards关联的简单过滤器。

ownCards: Ember.computed.filter('cards', function(card) {
  return card.get('user.id') === this.get('session.content.id');
})

使用观察者并使用jquery手动添加drawnNumbers中的类并不是一个惯用的。您可能应该利用项目控制器来绑定类

请参阅enter link description here