Ho un modello definito e una collezione:Filtro spina dorsale di raccolta per valore di attributo
var Box = Backbone.Model.extend({
defaults: {
x: 0,
y: 0,
w: 1,
h: 1,
color: "black"
}
});
var Boxes = Backbone.Collection.extend({
model: Box
});
quando la raccolta è popolata con i modelli, ho bisogno di una nuova collezione Scatole fatto di modelli di sicurezza che hanno un colore specifico attributo contenuto nella raccolta completa, lo faccio in questo modo:
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);
Questo funziona, ma lo trovo un po 'complicato e poco efficiente. C'è un modo per fare questa stessa cosa in un modo più semplice?
ecco il codice che ho descritto: http://jsfiddle.net/HB88W/1/
Sarà questo cambiamento Cid a modello? – janetsmith
filterBy: function (attributo, valore) { filtrato = this.filter (function (box) { return box.get (attribute) === value; }); restituisce nuove caselle (filtrate); } – Josh
Perché restituire un 'nuove scatole()'. Vorrei scrivere var = Scatole Backbone.Collection.extend ({ modello di sicurezza, byColor: la funzione (colore) { ritorno this.filter (function (box) { ritorno box.get ("colore") = == colore; }); } }); – marcoslhc