Javascript ember中的实时更新视图

Javascript ember中的实时更新视图,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我使用web套接字构建应用程序,并希望动态更改视图 我的模型中有代码: model: function () { var store = this.store; var socket = new_socket(); socket.on('message', function (message) { store.push('record',message); }); return store.find('consultation'); }

我使用web套接字构建应用程序,并希望动态更改视图

我的模型中有代码:

model: function () {
    var store = this.store;
    var socket = new_socket();

    socket.on('message', function (message) {
        store.push('record',message);
    });
   return store.find('consultation');
}
和数据成功加载到ember存储,但ember不更新视图

我需要做什么

例如,当我使用
save
时,所有工作正常:

var record = this.store.createRecord('record',{});
record.save()
更新:

我找到了解决方案:,但它也不起作用

我的控制器(consultation.js):

模板:

{{#each item in controller.records}}

{{/each}}
模型咨询如下所示(带有
hasMany
字段):

第二个
console.log
未打印

我就是这样解决的

var obj=store.push('record',jsonObj.message);
此.controllerFor('consultation').get('records').pushObject(obj)


但看起来不太好。通过这种方式,我可以在模型和控制器之间进行自动同步

您已经计算了控制器中依赖于自身的属性。此外,您真的不应该将任何内容推送到存储区,从概念上讲,当您在套接字上收到某个内容时,您的模型发生了更改,您希望在代码中捕获该概念,因此您真的应该在收到套接字消息时更新模型。我这样做的方式是做如下事情:

在路由器中

model: function() {
  var records = this.store.find('consultation',{});
  var socket = new_socket();
  socket.on('message', function (message) {
    records.pushObject(message);
  });
 return records;
}
控制器根本不需要任何计算属性。 在模板中,代码应该是:

{{#each content}}
  //do something here
{{/each}}

我对您在代码中使用
咨询
记录
感到有点困惑

records是一个有许多字段的咨询
记录:DS.hasMany('record',{async:true})
<代码>模型
将只调用一次,因此它不是更新控制器。谢谢,已解决。我忘记了关系(将记录推送到咨询),比如currentConsultation.get('records').pushObject(recordObj);
model: function() {
  var records = this.store.find('consultation',{});
  var socket = new_socket();
  socket.on('message', function (message) {
    records.pushObject(message);
  });
 return records;
}
{{#each content}}
  //do something here
{{/each}}