按相关模型过滤模型

时间:2013-06-05 10:08:32

标签: ember.js ember-data

我正在尝试按相关内容过滤一些内容。我遇到的麻烦是,当我尝试过滤时,相关内容未必加载。我已尝试使用then()函数,但无法访问范围之外的变量。这是我试过的

var filter = this.get('categoryFilter').toLowerCase();
App.Category.find().then(function() {
 content = this.get('content').filter(function(item) {
   return item.get('category.name').toLowerCase() === filter;
   // ERROR! filter variable doesn't exist here
  }, this);
});

第一次没有then()的过滤失败,但每次之后它都有效,因为数据已经加载了。

过滤列表的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用filterProperty函数过滤RecordArray:http://emberjs.com/api/classes/Ember.Enumerable.html#method_filterProperty

尝试类似:

var filteredCategories = App.Category.find().filterProperty('nameLowerCase', filter);

在您的类别中,您需要一个属性来对

运行过滤器
App.Category = Ember.Object.extend({

  name: '',

  nameLowerCase: function() {
    return this.get('name').toLowerCase();
  }.property('name')

});

假设您有一个CategoriesRoute,它将Categories控制器的模型设置为App.Category.find(),那么您可以使用以下代码从模板中访问已过滤的列表:

App.CategoriesController = Ember.Array.extend({

  filtered: function() {
    var filter = 'String value to compare lower case name to';
    return this.get('model').filterProperty('nameLowerCase', filter);

  }.property('model.@each.nameLowerCase')
});

然后在您的模板中,您可以使用:

{{#each filtered}}
  //Your code here
{{/each}}

编辑06/06/2013 ...请注意,现在在App.Category.find()上调用了filterProperty