0

我正在尝试使用2个搜索参数搜索集合。目前我只管理通过1个搜索参数进行搜索,这里是我的单一参数搜索。筛选/搜索基于2个属性的集合

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; 
    }, 

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

+0

是found_models数组?看起来你需要结合结果。 –

回答

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); 
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来回报您。