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來回報您。