2012-08-02 8 views
7

backbone.jsにコレクションメソッドをチェーンする方法はありますか?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 
}); 

私はこのような何かを試してみましたが、それは間違っている:

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

答えて

14

あなたはBackbone.Collection方法方法(私は間違っていないよ希望)にアクセスすることはできませんが、あなたはおそらくバックボーンメソッドのほとんどを知っているようにしています

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(); 
を:それはあなたが whereメソッドのソースコードを見れば、あなたはそれがUnderscore.js filterメソッドを使用して表示されますので、これはあなたがそう望むものを達成できることを意味します意味してメソッドをベースUnderscore.js

.value()ここではまったく役に立ちませんが、それぞれのモデルの.eachメソッド内に「もの」を作成していますが、フィルタリングされた都市の配列を返すとしたら、.mapfilteredResultsはあなたの結果になります

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