根据2个属性过滤/搜索集合

时间:2015-04-16 14:10:50

标签: javascript backbone.js underscore.js backbone-collections

我正在尝试使用2个搜索参数搜索集合。目前我只能通过1个搜索参数进行搜索,这是我的工作单参数搜索。

search: function(filterValue) {
    var filterValue = filterValue.toLowerCase();
    var matcher = new RegExp(filterValue);
    var found_models = this.filter(function(model) {
        return matcher.test(model.get('name').toLowerCase());
    });

    return found_models;
},

还可以搜索名称以外的其他属性,我想也许是这样的,

search: function(filterValue) {
        var filterValue = filterValue.toLowerCase();
        var matcher = new RegExp(filterValue);
        var found_models = this.filter(function(model) {
            return matcher.test(model.get('name').toLowerCase());
        });
        var found_models = this.filter(function(model) {
            return matcher.test(model.get('clients').get('name').toLowerCase());
        });

        return found_models;
    },

但这些只是覆盖与name参数匹配的任何结果。

2 个答案:

答案 0 :(得分:1)

诀窍是返回filter。如果您返回true该模型已添加到输出中。这意味着您可以在过滤器功能中进行任何匹配,甚至是双重匹配!

所以代码就像:

var found_models = this.filter(function(model) {
    return matcher.test(model.get('name').toLowerCase()) && matcher.test(model.get('clients').get('name').toLowerCase());
});

这会给true&& true,会让true返回。

答案 1 :(得分:0)

where方法?

var friends = new Backbone.Collection([
  {name: "Athos",      job: "Musketeer"},
  {name: "Porthos",    job: "Musketeer"},
  {name: "Aramis",     job: "Musketeer"},
  {name: "d'Artagnan", job: "Guard"},
]);

var musketeers = friends.where({job: "Musketeer"});

alert(musketeers.length);