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中重现这种行为吗?