Chain Backbone.js集合方法

时间:2012-08-02 11:18:36

标签: backbone.js underscore.js

如何在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' 

1 个答案:

答案 0 :(得分:14)

你无法以这种方式访问​​Backbone.Collection方法(希望我没错)但是你可能知道大多数Backbone方法都是基于Underscore.js的方法,所以这意味着如果你看一下源代码您将看到where方法使用Underscore.js filter方法,这意味着您可以实现您想要的功能:

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);