2012-08-02 17 views
7

W jaki sposób mogę połączyć metody kolekcjonowania w backbone.js?Metoda kolekcji 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 
}); 

Próbowałem coś takiego, ale to jest złe:

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

Odpowiedz

14

Nie można uzyskać dostępu Backbone.Collection metod w ten sposób (mam nadzieję, że nie mylę), ale jak zapewne wiesz większość metod szkieletowych underscore.js na podstawie metody tak, że oznacza, że ​​jeśli spojrzeć na kodzie źródłowym where metody można zobaczyć wykorzystuje underscore.js filter sposób, więc to oznacza, że ​​można osiągnąć to, co chcesz robić tak:

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() nie jest tu dla ciebie przydatny, robisz "stuff" w metodzie .each dla każdego modelu, ale jeśli chcesz, powiedzmy, zwróć tablicę filtrowanych miast, które możesz zrobić z .map i filteredResults będzie twoje wyniki

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