Ember.js DS.defaultStore.load(App.foo,payload)仅在DS.RESTAdapter首次使用时有效
更新: 这不是问题 (见下文) 因此,我写了一个JSFIDLE来显示除了小提琴工作之外的坏行为!而我真正的代码没有。唯一的区别是我在实际代码中使用了Ember.js DS.defaultStore.load(App.foo,payload)仅在DS.RESTAdapter首次使用时有效,ember.js,ember-data,Ember.js,Ember Data,更新: 这不是问题 (见下文) 因此,我写了一个JSFIDLE来显示除了小提琴工作之外的坏行为!而我真正的代码没有。唯一的区别是我在实际代码中使用了RESTAdapter,因此数据是从服务器而不是FIXTURES中提取的 在JSFIDLE中:首先单击“模拟第一次手动加载”,然后单击第二个按钮以查看它是否正常工作(即连续多次将新的或更新的数据加载到存储) 问题 我正在通过WebSocket将更新的信息发送到我的Ember应用程序。我成功地设置了一个监听器,在正确的控制器上触发一个函数,并且能够第
RESTAdapter
,因此数据是从服务器而不是FIXTURES
中提取的
在JSFIDLE中:首先单击“模拟第一次手动加载”,然后单击第二个按钮以查看它是否正常工作(即连续多次将新的或更新的数据加载到存储)
问题
我正在通过WebSocket将更新的信息发送到我的Ember应用程序。我成功地设置了一个监听器,在正确的控制器上触发一个函数,并且能够第一次更新记录。但是,所有连续的尝试都不会更新存储,我想知道这是否与存储的状态有关?但如果是这样的话,我不确定如何处理
这是更新或添加来自WebSocket的记录的代码:
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(数据)
部分。每次我通过WebSocket发送更新的数据时,都会调用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')
});
我认为下面的代码与这个问题无关,但为了防止有人感兴趣,我就是这样通过WebSocket(使用socket.io)侦听事件的:
对于如何将新的或更新的记录直接加载到存储中(而不是一次),是否有任何建议
更新:
代码确实是正确的。新数据加载到存储中很好,但是当新的/更新的信息加载到DS.defaultStore
我不想删除这个问题,因为其他人可能会发现其中的信息很有用,但请按照您的喜好投票。很抱歉,在写问题之前我没听清楚
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)
})
}
});