gpt4 book ai didi

javascript - ember 中的实时更新 View

转载 作者:行者123 更新时间:2023-12-03 11:56:17 31 4
gpt4 key购买 nike

我使用网络套接字构建应用程序,我想动态更改 View

我的模型中有代码:

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 不更新 View 。

我需要做什么?

例如,当我使用保存时,一切正常:

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

更新:

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

我的 Controller (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('咨询').get('记录').pushObject(obj);

但是看起来不太好。通过什么方式我可以在模型和 Controller 之间进行自动同步

最佳答案

您已计算出 Controller 中依赖于自身的属性。另外,你真的不应该将任何东西推送到商店,从概念上讲,当你在套接字上收到某些东西时,你的模型发生了变化,你想在代码中捕获这个概念,所以你真的应该在获得套接字时更新模型信息。我这样做的方法是执行如下操作:

在路由器中,

model: function() {
var records = this.store.find('consultation',{});
var socket = new_socket();
socket.on('message', function (message) {
records.pushObject(message);
});
return records;
}

Controller 根本不需要有任何计算属性。在模板中,代码将是:

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

我对您在代码中使用consultationrecord 感到有点困惑。

关于javascript - ember 中的实时更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606960/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com