2013-01-08 29 views
9

我已經搜索了很長一段時間,但沒有辦法有一個where子句或條件。例如,如果我有一個集合Cars,我要儘量做到以下幾點:骨幹集合where條款與OR條件

Cars.where({ 
      model: 1998, 
      color: 'Black', 
      make: 'Honda' 
      }) 

那麼上面需要做的是尋找一個carmodel1998colorBlackmakeHonda

但我需要一種方法來獲得cars這三個條件之一是真的。

回答

11
Cars.filter(function(car) { 
    return car.get("model") === 1998 || 
     car.get("color") === "Black" || 
     car.get("make") === "Honda"; 
}); 
+0

偉大的一點。我已經完全刪除了這個建議。 – Lukas

+0

Hi @Lukas。感謝您的迴應。但這不是我想要的。我有這個解決方案。上面的例子只是爲了說明。我擁有的問題是我處於沒有模型屬性的情況。我知道我可以通過_.keys(model.attributes)得到它。但我不願意過濾函數回調複雜化。如果有一個直接的方法,那將會很棒。感謝所有的幫助。謝謝 –

+1

我讀了你的第一個實現'Cars.where({model:1998})。concat( Cars.where({color:「Black」}), Cars.where({make:「Honda」}) );'。這更適合我的情況。但仍在尋找一個乾淨的解決方案。 –

0

我知道這是一箇舊的帖子,但也許這可能對某人有用。

我也有類似的問題,但有點simplier,我該如何解決它

var ids=[1,2,3,4]; 
var plans=this.collection.filter(function(plan){ 
      var rt=false; 
      for(var i=0;i<this.whereOR.length;i++){ 
       rt=rt||plan.get('id')==this.whereOR[i]; 
      } 
      return rt; 
     },{whereOR:ids}); 

我想這可以適應解決的問題提出這樣的:

var search={model: 1998,color: 'Black',make: 'Honda'}; 
Cars.filter(function(car){ 
       var rt=false; 

       for(key in this.whereOR) { 
        rt=rt||car.get(key)==this.whereOR[key]; 
       } 
       return rt; 
      },{whereOR:search});) 

希望這幫助他人!