【问题标题】:Emberjs: How to filter by more than one property at onceEmberjs:如何一次过滤多个属性
【发布时间】:2013-03-10 01:30:27
【问题描述】:

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

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

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

    您可以使用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/

    【讨论】:

    • 我只是错过了filter(fn)。不错的一个 MWJ。
    • 我不知道,但observe('firstName', 'lastName') 也可以。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 2017-07-28
    • 2020-12-10
    • 2021-03-17
    • 2015-03-03
    • 2011-08-27
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多