使用 Ember 可枚举方法过滤模型数据

Filtering model data with Ember Enumerable methods

完整代码:

http://jsbin.com/xabome/1/edit?html,js,output

我试图通过对从商店返回的记录数组调用 .filter 来过滤一些模型数据,但它没有任何效果。

我的控制器:

 App.IndexController = Ember.Controller.extend({
  fooDataOne: function() {
    var fooData = this.get('fooData');
    // If uncommented, I return both items
    // return fooData;
    return fooData.filter(function(item) {
      console.log("Why am I not filtering?"); // Never called
      if(item.get('id') == 1) { return true; }
    });
  }.property('fooData')
});

难道不能像我想的那样调用 .filter 吗?我应该怎么做?

我找到了一个替代解决方案,即使用观察器并直接从商店获取 FilteredRecordArray:

App.IndexController = Ember.Controller.extend({
  fooDataFilter: function() {
    var fooData = this.get('fooData');
    var fooDataOne = this.store.filter('test-data', function(item) {
      if (item.get('id') == 1) { return true; }
    });
    this.set('fooDataOne', fooDataOne);
  }.observes('fooData').on('init')                                                              
});

虽然上面的方法有效,但它没有解释为什么可枚举方法不能正常工作 DS.RecordArray,而 fooData 应该是。

store.find 方法总是 returns 一个 Promise。

因此您可以在 then 块中过滤数据:

  setupController: function(controller, model) {
    this.store.find('test-data').then(function(data) {
      var fooData = data.filter(function(item) {
        return item.get('id') == 1;
      });
      controller.set('fooDataOne', fooData);
    });
  }