2013-01-08 24 views
9

これはかなり長い間検索しましたが、where節を持つ条件を持つことができませんでした。私はコレクションCarsを持っていると私は次の操作を行いますしようとした場合たとえば:OR条件付きの節集合

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

をそれでは上記行いますと、model1998colorあるBlackあるとmakeHondaあるcarための検索です。

しかし、私はcarsという3つの条件のいずれかを満たす方法が必要です。

答えて

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

素晴らしい点。私はその提案をすべて削除しました。 – Lukas

+0

こんにちは@ルーカス。応答していただきありがとうございます。しかし、これは私が探していたものではありません。私はこのソリューションを念頭に置いていました。上記の例は説明のためのものです。私が持っている問題は、私がモデルの属性を持っていない状況にあることです。 _.keys(model.attributes)で取得できることはわかっています。しかし、私はフィルタ関数のコールバックを複雑にするつもりはありませんでした。まっすぐ進む道があったのは素晴らしいことでした。すべての助けを感謝します。ありがとう –

+1

そして私はあなたの最初の実装 'Cars.where({model:1998})concat( Cars.where({color:" Black "})、 Cars.where({make:" Honda "}) ); '。これは私の状況に適していました。しかし、まだクリーンなソリューションを探しています。 –

0

これは古い投稿だと知っていますが、これは誰かにとって有用なものかもしれません。

私はこの問題を解決するために適合させることができると思う私は

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

それを解決した方法と同様の問題を抱えていたが、少しsimplier、これは次のように提案した:

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

・ホープ、この誰かを助けます!