在ember中的实时更新视图

时间:2014-09-01 13:29:57

标签: javascript ember.js ember-data

我使用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);

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

1 个答案:

答案 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}}

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