2012-08-01 11 views
41

मैं एक परिभाषित मॉडल और एक संग्रह है:फ़िल्टर रीढ़ संग्रह

var Box = Backbone.Model.extend({ 
    defaults: { 
     x: 0, 
     y: 0, 
     w: 1, 
     h: 1, 
     color: "black" 
    } 

}); 

var Boxes = Backbone.Collection.extend({ 
    model: Box 
}); 

जब संग्रह मॉडलों के साथ से भर जाता है, मैं एक नया बक्से संग्रह बॉक्स मॉडल एक विशिष्ट रंग है से बाहर कर दिया की जरूरत है पूर्ण संग्रह में निहित विशेषता, मैं इसे इस तरह से करता हूं:

var sorted = boxes.groupBy(function(box) { 
    return box.get("color"); 
}); 


var red_boxes = _.first(_.values(_.pick(sorted, "red"))); 

var red_collection = new Boxes; 

red_boxes.each(function(box){ 
    red_collection.add(box); 
}); 

console.log(red_collection); 

यह काम करता है, लेकिन मुझे यह थोड़ा जटिल और अक्षम लगता है। क्या यह वही काम एक और आसान तरीके से करने का कोई तरीका है? http://jsfiddle.net/HB88W/1/

उत्तर

82

मैं संग्रह का एक नया उदाहरण लौटने की तरह:

यहाँ कोड मैं वर्णित है। यह इन फ़िल्टरिंग विधियों को श्रृंखलाबद्ध बनाता है (उदाहरण के लिए boxes.byColor("red").bySize("L"))।

var Boxes = Backbone.Collection.extend({ 
    model: Box, 

    byColor: function (color) { 
     filtered = this.filter(function (box) { 
      return box.get("color") === color; 
     }); 
     return new Boxes(filtered); 
    } 
}); 

var red_boxes = boxes.byColor("red") 
+3

विल मॉडल में इस परिवर्तन सीआईडी ​​देखते हैं? – janetsmith

+4

फ़िल्टर द्वारा: फ़ंक्शन (विशेषता, मान) { फ़िल्टर किया गया = this.filter (फ़ंक्शन (बॉक्स) { वापसी बॉक्स.get (विशेषता) === मान; }); नए बॉक्स लौटें (फ़िल्टर); } – Josh

+0

क्यों 'नए बॉक्स() 'वापस लौटें। बॉक्स, byColor: समारोह (रंग) { वापसी this.filter (समारोह (बॉक्स) { वापसी box.get ("रंग") = मैं वर बक्से = Backbone.Collection.extend ({ मॉडल लिखते थे == रंग; }); } }); – marcoslhc

43

http://backbonejs.org/#Collection-where

var red_boxes = boxes.where({color: "red"}); 

var red_collection = new Boxes(red_boxes); 
+8

'जहां संग्रह संग्रह ऑब्जेक्ट की बजाय संग्रह की सरणी देता है। – seebiscuit

+0

यह एक अच्छा समाधान है, जब तक कि आपको बैकबोन के पुराने संस्करण का उपयोग करने के लिए मजबूर नहीं किया जाता है, जिसमें अभी तक "जहां" लागू नहीं किया गया है। – paniclater

संबंधित मुद्दे