我使用web-socket构建应用程序,我想动态更改视图
我的模型中有代码:
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()
更新
我找到this解决方案:,但它也无效
我的控制器(consultation.js):
export default Ember.ObjectController.extend({
needs: ['application'],
records: function() {
console.log(this.get('store'));
return this.get('store').filter('record', function(record) {
console.log(record);
});
}.property('records'),
模板:
{{#each item in controller.records}}
{{/each}}
模型咨询如下(使用hasMany
字段):
export default DS.Model.extend({
records: DS.hasMany('record', { async: true }),
});
第二个console.log
未打印,
我解决了这个问题
var obj = store.push('record', jsonObj.message);
this.controllerFor('consultation').get('records').pushObject(obj);
但看起来不太好。我可以通过哪种方式在模型和控制器之间进行自动同步
答案 0 :(得分:1)
您已计算出控制器中依赖于自身的属性。此外,你真的不应该向商店推送任何东西,从概念上讲,当你在套接字上收到一些东西,你的模型改变了,你想在你的代码中捕获这个概念,所以当你得到一个套接字时你真的应该更新模型信息。我这样做的方法是做类似以下的事情:
在路由器中,
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}}
我对您在代码中使用consultation
和record
感到有些困惑。