下面我肯定会过滤一个属性,但是如何一次性过滤?也就是说,不向用户提供包含不同搜索选项的下拉列表 示例:我的搜索字词可能是姓名,电子邮件或年龄。
var search = this.controllerFor('employees').search; //can be name, email or age
employees = this.get('currentModel').filterProperty('name', search);
上述方法适用于更新主列表,但我只能一次过滤一个属性。
//Sample Model
App.Employee = DS.Model.extend({
email: DS.attr('string'),
name: DS.attr('string'),
age: DS.attr('number'),
})
一种想法是,如果过滤器结果为length = 0
,则会再次重新过滤,以及如何合并结果。但是,我对这个想法并不陌生,并且相信Ember可能会有一个更好 - 更优雅的方式来实现这个目标。
答案 0 :(得分:8)
您可以使用filter
功能过滤模型中的多个属性,甚至可以使用控制器中的其他属性。例如:
想象一下这样的模型:
App.Person = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
fullName: function() {
return '%@ %@'.fmt(
this.get('firstName'),
this.get('lastName')
);
}.property('firstName', 'lastName')
});
按多个属性进行过滤,假设您有一个控制器,其搜索功能类似:
...
performSearch: function(searchTerm) {
return this.get('content').filter(function(person) {
return person.get('firstName').indexOf(searchTerm) !== -1 ||
person.get('lastName').indexOf(searchTerm) !== -1;
});
},
...
这将遍历content
中的联系人列表并应用一个或多个过滤器,仅返回与过滤器对应的模型对象。