使用Ember Enumerable方法过滤模型数据

时间:2015-03-06 22:21:57

标签: ember.js

完整代码:

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,因为我想来这里吗?我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

我通过使用观察者并直接从商店获取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应该是。

答案 1 :(得分:0)

store.find方法始终返回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);
    });
  }