2

更新: 这是一个非问题 (见下文)

所以我写了一个 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

我不想删除这个问题,因为其他人可能会发现其中的信息很有用,但可以按你喜欢的方式投票。很抱歉在写这个问题之前我没有明白这一点。

4

0 回答 0