2013-01-08 24 views
9

Bir süredir bunun için arama yaptım, ancak nerede bir koşul veya koşulu olan bir yol elde edemedim. Örneğin ben bir koleksiyon Cars var ve aşağıdakileri yapmak çalışırsanız:Omurga koleksiyonu ile OR koşulu

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

Peki yukarıda yapacak model1998 olduğunu VE colorBlack olduğunu VE makeHonda bir car için aramasıdır.

Ancak, üç koşuldan herhangi birine sahip olan cars elde etmenin bir yolunu istiyorum.

cevap

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

Harika gelin. Bu öneriyi tamamen kaldırdım. – Lukas

+0

Merhaba @ Lukas. Cevap verdiğin için teşekkürler. Ama aradığım şey bu değildi. Bu çözümü aklımda tuttum. Yukarıdaki örnek sadece illüstrasyon içindir. Sahip olduğum problem, modelin özelliklerine sahip olmadığım bir durumdayım. Biliyorum, onu _.keys (model.attributes) ile alabilirim. Ama ben filtre fonksiyonunun geri dönüşünü karmaşıklaştırmak istemiyordum. Çok iyi olurdu, ileriye doğru bir yol vardı. Tüm yardımı takdir ediyorum. Teşekkürler –

+1

Ve ilk uygulamanızı okudum 'Cars.where ({model: 1998}) concat ( Cars.where ({color:" Siyah "}), Cars.where ({make:" Honda "}) ); '. Bu benim durumumu daha da iyi hale getirdi. Ama yine de temiz bir çözüm arıyorlar. –

0

Bu eski bir yazı olduğunu biliyorum, ama belki bu birileri için yararlı olabilir.

Ben benzer bir sorun vardı, ama biraz daha basit, ben onu çözdüm bu nasıl bu sorunu çözmek için adapte olabileceğini düşünüyorum
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}); 

böyle önerdi:

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

Umut bu birine yardım et!