Backbone.Model/Collectionのメソッドとして利用できるUnderscore.jsのメソッド
sortBy,map,pluck,filter,groupBy,pick.omitとか使える。いくつか試してみた。
backbone.js v1.0.0
function l(s) {console.log(s)}; function a(s) {alert(s)}; l('Underscore in Backbone.Collection'); var coll = new Backbone.Collection(); coll.add([ {id: 0, name: 'taro', age: 20, sex: 'male'} ,{id: 1, name: 'jiro', age: 10, sex: 'male'} ,{id: 2, name: 'hanako', age: 11, sex: 'female'} ,{id: 3, name: 'kayo', age: 21, sex: 'female'} ]); coll.forEach(function(model){ l(JSON.stringify(model)); }); var sorted = coll.sortBy(function(model){ return model.get('age'); }); var mapped = new Backbone.Collection(sorted).map(function(model){ return {id: model.get('id'), name: model.get('name') + ',yamada', sex: model.get('sex')}; }); var plucked = new Backbone.Collection(mapped).pluck('name'); //ageの昇順になってnameにyamadaが追加されてnameだけが抜き出されている l(JSON.stringify(plucked)); var grouped = new Backbone.Collection(mapped).groupBy('sex'); l(JSON.stringify(grouped.male)); //いちいちnew Backbone.Collection(array)は面倒なのでchainする l( coll.chain() .filter(function(model){return model.get('age') <= 20;}) .sortBy(function(model){return model.get('age')}) .map(function(model){ return {id: model.get('id'), name: model.get('name') + ',yamada', sex: model.get('sex')} }) .pluck('name') .value() );//groupByは特殊でできなかった l('Underscore in Backbone.Model'); l(coll.get(0).pick(['name','age', 'sex'])); l(coll.get(0).omit(['id','sex']));