7

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' 
4

1 に答える 1

15

その方法でメソッドにアクセスすることはできませんBackbone.Collection(私が間違っていないことを願っています) が、バックボーン メソッドのほとんどが Underscore.js ベースのメソッドであることをおそらく知っているので、メソッドのソース コードをwhere見ると、Underscore を使用していることがわかります。 jsfilterメソッドを使用しているため、次のようにして目的を達成できることを意味します。

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()ここでは役に立ちません。各モデルのメソッド内で「もの」を作成していますが.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);
于 2012-08-02T13:51:14.467 に答える