2012-08-02 10 views
7

Wie kann ich Sammlungsmethoden in backbone.js Kette?Chain Backbone.js Sammlungsmethode

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

Ich habe versucht, so etwas wie dieses, aber es ist falsch:

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

Antwort

14

Sie nicht Backbone.Collection Methoden zugreifen können, die Art und Weise (hoffe ich nicht falsch liege), aber wie Sie wahrscheinlich die meisten der Backbone Methoden kennen, sind Underscore.js basierte Methoden, so dass heißt, wenn Sie an der der Quellcode für where Methode schauen sehen Sie es verwendet Underscore.js filter Methode, so bedeutet dies, können Sie erreichen, was Sie wollen dabei:

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() ist nicht von Nutzen für Sie hier, Sie machen "stuff" innerhalb der .each Methode für jedes der Modelle, aber wenn Sie sagen möchten, geben Sie eine Reihe von gefilterten Städten können Sie mit .map und in filteredResults werden Ihre Ergebnisse sein

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