更新: 这是一个非问题 (见下文)
所以我写了一个 jsfiddle 来展示除了小提琴作品之外的不良行为!而我的真实代码没有。唯一的区别是我RESTAdapter
在我的真实代码中使用了,所以数据是从服务器而不是FIXTURES
.
在 jsfiddle 中:首先单击“模拟第一次手动加载”,然后单击第二个按钮以查看它是否正常工作(即连续多次将新的或更新的数据加载到存储中)
http://jsfiddle.net/iceking1624/NZZ42/4/
问题
我正在通过 websockets 向我的 Ember 应用程序发送更新的信息。我成功地设置了一个侦听器以在正确的控制器上触发一个功能,并且能够第一次更新记录。但是所有连续的尝试都不会更新商店,我想知道这是否与商店的状态有关?但如果是这种情况,我不确定如何处理。
这是更新或添加来自 websockets 的记录的代码:
App.SessionController = Ember.ObjectController.extend({
updateReceived: function(data) {
console.log(data);
DS.defaultStore.load(App.Choice, data.choice);
DS.defaultStore.load(App.Question, data.question);
}
});
注意console.log(data)
部分。每次我通过 websockets 发送更新的数据时,updateReceived
都会调用并记录正确的数据,但只能在第一次使用。DS.defaultStore.load(...)
我更新两个App.Question
&的原因App.Choice
是因为它们有关系:
App.Question = DS.Model.extend({
"choices" : DS.hasMany('App.Choice')
});
App.Choice = DS.Model.extend({
"question" : DS.belongsTo('App.Question')
});
我认为下面的代码与该问题无关,但以防万一有人感兴趣,这就是我通过 websockets 监听事件的方式(使用 socket.io):
App.SessionRoute = Ember.Route.extend({
enter: function() {
this.socket = io.connect('http://10.0.1.4')
},
setupController: function(controller, model) {
var self = this;
this.socket.on('update', function(data) {
self.controller.send('updateReceived', data)
})
}
});
关于如何将新的或更新的记录直接加载到商店中(而不仅仅是一次),有什么建议吗?
更新:
代码确实是正确的。新数据加载到商店中就好了,但是view
当新的/更新的信息被加载到时我没有正确地重新渲染DS.defaultStore
我不想删除这个问题,因为其他人可能会发现其中的信息很有用,但可以按你喜欢的方式投票。很抱歉在写这个问题之前我没有明白这一点。