42 votes

Filtrer la collection de réseau principal par valeur d'attribut

J'ai un modèle défini et une collection:

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

});

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

Quand la collection est remplie avec les modèles, j'ai besoin d'un nouveau Boîtes de collection hors de la Zone de modèles qui ont un attribut de couleur contenue dans la collection complète, je le fais de cette façon:

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

Cela fonctionne, mais je trouve ça un peu compliqué et unefficient. Est-il un moyen de faire la même chose dans un moyen plus simple?

Voici le code que j'ai décrit: http://jsfiddle.net/HB88W/1/

Merci

83voto

hgmnz Points 7239

J'aime retourner une nouvelle instance de la collection. Cela rend ces méthodes de filtrage chaînables ( boxes.byColor("red").bySize("L") , par exemple)

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

46voto

Andrei Points 3689

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

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

var red_collection = new Boxes(red_boxes);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X