我正在尝试按相关内容过滤一些内容。我遇到的麻烦是,当我尝试过滤时,相关内容未必加载。我已尝试使用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()
的过滤失败,但每次之后它都有效,因为数据已经加载了。
过滤列表的最佳方式是什么?
答案 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