Emberjs:如何一次过滤多个房产

时间:2013-03-09 11:49:08

标签: javascript ember.js ember-data

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

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

1 个答案:

答案 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中的联系人列表并应用一个或多个过滤器,仅返回与过滤器对应的模型对象。

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