8

下面我肯定是按单个属性进行过滤,但是如何一次性按另一个属性进行过滤?也就是说,没有向用户提供包含不同搜索选项的下拉菜单 示例:我的搜索词可能是姓名、电子邮件或年龄。

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 可能有更好、更优雅的方式来实现这一点。

4

1 回答 1

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并应用一个或多个过滤器,仅返回与过滤器对应的模型对象。

小提琴:http: //jsfiddle.net/schawaska/ABJN7/

于 2013-03-09T17:30:27.100 回答