0

我正在尝试通过相关内容过滤一些内容。我遇到的麻烦是,当我尝试过滤时,相关内容不一定已加载。我尝试使用该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()失败,但之后每次都有效,因为数据已经加载。

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

4

1 回答 1

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

编辑 2013 年 6 月 6 日...请注意,现在在 App.Category.find() 上调用 filterProperty

于 2013-06-05T10:42:44.443 回答