Javascript ember中的实时更新视图
我使用web套接字构建应用程序,并希望动态更改视图 我的模型中有代码: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'); }
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}}