2013-01-08 9 views
9

Szukałem tego przez dłuższy czas, ale nie mogłem uzyskać sposobu, aby mieć klauzulę gdzie lub warunek. Na przykład jeśli mam kolekcję Cars i staram się wykonać następujące czynności:Zbieranie szkieletu, gdzie klauzula z warunkiem LUB

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

Więc co wyżej zrobi to poszukiwanie car którego model jest 1998 I color jest Black I make jest Honda.

Ale potrzebuję sposobu, aby uzyskać cars, które mają jeden z trzech warunków prawdziwych.

Odpowiedz

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

Świetny punkt. Całkowicie usunąłem tę sugestię. – Lukas

+0

Witam @Lukas. Dziękuję za odpowiedź. Ale tego nie szukałem. Miałem to na uwadze. Powyższy przykład był jedynie ilustracją. Problem, który mam, polega na tym, że nie mam atrybutów modelu. Wiem, że mogę go uzyskać przez _.keys (model.attributes). Ale nie chciałem zbytnio komplikować wywołania funkcji filtra. Byłoby wspaniale, gdyby istniała prosta droga do przodu. Doceń wszelką pomoc. Dzięki –

+1

I przeczytałem twoją pierwszą implementację 'Cars.where ({model: 1998}) concat ( Cars.where ({color:" Black "}), Cars.where ({make:" Honda "}) ); '. To lepiej pasowało do mojej sytuacji. Ale wciąż szuka czystego rozwiązania. –

0

Wiem, że to stary post, ale może to może być przydatne dla kogoś.

miałem podobny problem, ale trochę prostsza, to w jaki sposób mogę rozwiązać go

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

myślę, że to może być dostosowany do rozwiązania problemu zaproponowano tak:

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

nadzieję, że ten pomóc komuś!