Ember.js 余烬:store.update是否更新所有属性?
我正在Ember.js中创建一个实时多人文本游戏。 到目前为止非常令人兴奋,但我遇到了一个小问题 我有一个Ember.js 余烬:store.update是否更新所有属性?,ember.js,ember-data,Ember.js,Ember Data,我正在Ember.js中创建一个实时多人文本游戏。 到目前为止非常令人兴奋,但我遇到了一个小问题 我有一个游戏模型,看起来有点像这样: App.Game = DS.Model.extend({ numbers: DS.attr(), drawnNumbers: DS.attr(), // array gameStatus: DS.attr(), table: DS.belongsTo('table'), bingoCards: DS.hasMany('bi
游戏
模型,看起来有点像这样:
App.Game = DS.Model.extend({
numbers: DS.attr(),
drawnNumbers: DS.attr(), // array
gameStatus: DS.attr(),
table: DS.belongsTo('table'),
bingoCards: DS.hasMany('bingoCard', { async: true })
});
record = serializer.extractSingle(store, type, data);
// record looks like this:
// {id: "538c56843800226245c3621a", gameStatus: "idle"}
store.update("game", record);
model: function (params) {
return this.store.find('game', params.game_id);
},
setupController: function (controller, model) {
model.reload();
controller.set('model', model);
},
我的控制器如下所示(省略不必要的信息):
在视图中,我渲染卡片:
{{#each bingoCard in ownBingoCards}}
<div class="col-sm-4">
<div class="table-responsive">
<span class="label label-primary">Card {{bingoCard.id}}</span>
<table class="table table-bordered table-card">
<tbody>
{{#each row in bingoCard.squares}}
<!-- displaying the numbers here -->
{{/each}}
</tbody>
</table>
</div>
</div>
{{/each}}
如果我打开控制台,会得到以下信息:
inside ownBingoCards GameController.js:102
inside gameBingoCards GameController.js:32
inside ownBingoCards GameController.js:102
注意:游戏在游戏过程中会收到很多更新,所以每次所有的牌都会重新上牌。我怎样才能防止这种情况
编辑:
在我重新加载特定游戏路径上的页面后,它只会进入ownBingoCards和gameBingoCards中一次,并且不会在每次更新后重新呈现
编辑2:
gameMessages属性也只会被调用一次,为什么gameBingoCards会一直被调用?好吧,我已经在无数个小时后修复了它 我的路线是这样的:
App.Game = DS.Model.extend({
numbers: DS.attr(),
drawnNumbers: DS.attr(), // array
gameStatus: DS.attr(),
table: DS.belongsTo('table'),
bingoCards: DS.hasMany('bingoCard', { async: true })
});
record = serializer.extractSingle(store, type, data);
// record looks like this:
// {id: "538c56843800226245c3621a", gameStatus: "idle"}
store.update("game", record);
model: function (params) {
return this.store.find('game', params.game_id);
},
setupController: function (controller, model) {
model.reload();
controller.set('model', model);
},
我把它改成这样:
model: function (params) {
return this.store.find('game', params.game_id);
},
setupController: function (controller, model) {
model.reload();
controller.set('model', model);
controller.set('modelBingoCards', model.get('bingoCards'));
controller.set('modelMessages', model.get('messages'));
},
另外,我还将属性侦听器更改为.property('modelMessages')
和.property('modelBingoCards')
有人能告诉我为什么会这样吗