underscore tutorial traductor template react que backbonejs backbone backbone.js underscore.js backbone-collections

backbone.js - tutorial - Filtrar la colección de la red troncal por valor de atributo



underscore js template (2)

Tengo un modelo definido y una colección:

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

Cuando la colección se rellena con los modelos, necesito una nueva colección de Boxes hecha de modelos de Box que tienen un atributo de color específico contenido en la colección completa, lo hago de esta manera:

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

Esto funciona, pero me parece un poco complicado e ineficiente. ¿Hay alguna forma de hacer lo mismo de una manera más simple?

Aquí está el código que describí: http://jsfiddle.net/HB88W/1/


Me gusta devolver una nueva instancia de la colección. Esto hace que estos métodos de filtrado sean encadenables ( boxes.byColor("red").bySize("L") , por ejemplo).

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")