Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 余烬模型得到一次更新,但所有关联也得到重新加载?_Ember.js - Fatal编程技术网

Ember.js 余烬模型得到一次更新,但所有关联也得到重新加载?

Ember.js 余烬模型得到一次更新,但所有关联也得到重新加载?,ember.js,Ember.js,我有一个具有多个关系的余烬模型 App.Game = DS.Model.extend({ drawnNumbers: DS.attr(), cards: DS.hasMany('card', {async: true}), winners: DS.hasMany('winner'), }); drawnNumbers是具有已绘制数字的数组。在玩游戏时,此数组每隔几秒钟更新一次。 我的游戏控制器如下所示: drawnNumbers: function () {

我有一个具有多个关系的余烬模型

 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'),
我的问题是,每当DrawnNumber属性被更改时,我的所有卡片都会被过滤并重新呈现。这导致了巨大的滞后,因为每场游戏可能有数百张牌


有什么有效的方法可以解决这个问题吗?

您不筛选与您的型号关联的卡,而是筛选商店中的所有卡。所以我怀疑有什么东西会给你的游戏增加一张新卡,或者商店里会增加一张新卡

您的
ownCards
computed属性可能是
cards
关联上的一个简单过滤器

ownCards: Ember.computed.filter('cards', function(card) {
  return card.get('user.id') === this.get('session.content.id');
})
drawnNumbers
中使用观察者和jquery手动添加类并不是余烬的惯用用法。您可能应该利用项控制器来绑定类


谢谢。当我到家时,我会检查一下并让你知道:)我删除了游戏控制器中的所有其他属性,但每次我收到一个新号码,它仍然会再次渲染所有卡(并再次调用Ember.computer.filter)。你能把代码加上一个数字和你从你的服务器收到的有效载荷吗?我之前的评论是错误的。在硬刷新(删除所有其他属性)并使用我的旧
ownBingoCards
属性后,它可以工作。使用Ember.computed.filter仍然会导致视图再次呈现所有卡片。因此,如果不查看更多代码,我认为我无法帮助您。你能在JsBin中重现这种行为吗?