Mam zdefiniowany model i kolekcji:Filtr trzon kolekcji przez wartość atrybutu
var Box = Backbone.Model.extend({
defaults: {
x: 0,
y: 0,
w: 1,
h: 1,
color: "black"
}
});
var Boxes = Backbone.Collection.extend({
model: Box
});
Gdy kolekcja jest wypełniana modeli, muszę nową kolekcję Pudła z modeli pole, które mają określony kolor atrybut zawarty w pełnej kolekcji, robię to w następujący sposób:
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);
To działa, ale uważam, że jest nieco skomplikowany i nieefektywny. Czy istnieje sposób na zrobienie tego samego w prosty sposób?
Oto kod opisałem: http://jsfiddle.net/HB88W/1/
Spowoduje to zmianę Cid w modelu? – janetsmith
filterBy: function (attribute, value) { filtered = this.filter (function (box) { return box.get (atrybut) === wartość; }); powrót nowe pudełka (filtrowane); } – Josh
Dlaczego warto zwrócić 'new Boxes()'. Chciałbym napisać var pola = Backbone.Collection.extend ({ model: pudełko, byColor: function (kolor) { powrót this.filter (function (box) { box.get powrotu ("kolor") = == color; }); } }); – marcoslhc