Ember.js 通过计算机属性将新记录添加到存储时侦听

Ember.js 通过计算机属性将新记录添加到存储时侦听,ember.js,ember-data,Ember.js,Ember Data,我正在使用WebSocket将唱片推送到我的商店 我通过手柄模板在屏幕上显示项目 {{#each item in items}} <div>{{item.name}}</div> {{/each}} 现在,当新记录添加到商店时,我需要自动更新项目 items : function() { var items = this.store.find('items'); return items.filterBy({type : "NEW"}); }.prope

我正在使用WebSocket将唱片推送到我的商店

我通过手柄模板在屏幕上显示项目

{{#each item in items}}
  <div>{{item.name}}</div>
{{/each}}
现在,当新记录添加到商店时,我需要自动更新项目

items : function() {
   var items = this.store.find('items');
   return items.filterBy({type : "NEW"});
}.property('??????')

因此,当通过计算属性添加记录时,是否有某种方式侦听存储。理想情况下,我想听听特定类型的模型。

我假设您使用的是阵列控制器。您只需观察内容数组,如
content.[]
。所以你的控制器代码应该是

App.IndexController = Em.ArrayController.extend({
  filteredContent: function() {
    return this.get('model').filterBy('type', 0);
  }.property('model.[]')
});
并使用模板中的
filteredContent

{{#each filteredContent}}
  <li>{{title}} - {{songCount}}</li>
{{/each}}
{{{#每个filteredContent}
  • {{title}}-{{songCount}
  • {{/每个}}

    最好的方法是:

    items : function() {
      return this.store.filter(function(item){
          return item.get('TYPE') === 'NEW';
      });
    }.property()
    

    store.filter
    返回一个实时数组,该数组在存储中发生任何更改时都会更新,因此它将响应正在推送的新记录。

    实际上,我使用的是ObjectController。屏幕是一个有点复杂的拖放屏幕。概念是一样的。如果“items”是数组。您可以使用另一个名称(如'filteredItems'和'items.[]')创建一个CP作为依赖项。使用模板中的“filteredItems”而不是项。但是,如果通过余烬数据推送()将新数据添加到
    存储
    ,该怎么办。我的本地控制器阵列如何识别存储中的这些新数据?这就是我面临的问题。太棒了,正是我想要的。
    items : function() {
      return this.store.filter(function(item){
          return item.get('TYPE') === 'NEW';
      });
    }.property()