2012-08-02 14 views
7

¿Cómo puedo métodos de recopilación de cadenas en backbone.js?Método de recopilación de Chain Backbone.js

var Collection = this.collection; 
Collection = Collection.where({county: selected}); 
Collection = Collection.groupBy(function(city) { 
    return city.get('city') 
}); 
Collection.each(function(city) { 
    // each items 
}); 

he intentado algo como esto, pero es equivocado:

Object[object Object],[object Object],[object Object] has no method 'groupBy' 

Respuesta

14

No se puede acceder Backbone.Collection métodos de esa manera (espero no estar equivocado) pero como usted sabe probablemente la mayor parte de los métodos de cadenas principales están Underscore.js métodos basados ​​en lo que significa que si nos fijamos en el código fuente para el método where verá que utiliza Underscore.js filter método, asi que significa que se puede lograr lo que quiere hacerlo:

var filteredResults = this.collection.chain() 
    .filter(function(model) { return model.get('county') == yourCounty; }) 
    .groupBy(function(model) { return model.get('city') }) 
    .each(function(model) { console.log(model); }) 
    .value(); 

.value() no le sirve de nada aquí, está haciendo "cosas" dentro del método .each para cada modelo, pero si quiere decir devolver una serie de ciudades filtradas, puede hacerlo con .map y en filteredResults serán sus resultados

var filteredResults = this.collection.chain() 
    .filter(function(model) { return model.get('county') == yourCounty; }) 
    .map(function(model) { return model.get('city'); }) 
    .value(); 
console.log(filteredResults);