Backbone Collection SORT Comparator
by Julian Garcia Castillo
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
JavaScript
var fileModel = Backbone.Model.extend({
defaults: {
name: "",
printing: false,
online: false,
queueFiles: 0
}
});
var TestCollection = Backbone.Collection.extend({
model: fileModel,
comparator: function(a){
/* SORTING USING ONE MODEL */
if (a.get('printing')) {
return -a.get('queueFiles')
// If printing => order by queueFiles
} else {
return -a.get('online') - a.get('operational')
// if not => order by online and operational
}
//SORTING USING TWO MODELS
//return -a.get('printing') - -b.get('printing') || -a.get('queueFiles') - -b.get('queueFiles');
}
});
var collection = new TestCollection([
{
name: 'Sonia (4) printing',
printing: true,
online: true,
operational: true,
queueFiles: 4
},
{
name: 'Alfonso (2) printing',
printing: true,
online: true,
operational: true,
queueFiles: 2
},
{
name: 'Rafa (3) online no oper',
printing: false,
online: true,
operational: false,
queueFiles: 3
},
{
name: 'Cris (10) printing',
printing: true,
online: true,
operational: true,
queueFiles: 10
},
{
name: 'Julian (5) offline',
printing: false,
online: false,
operational: false,
queueFiles: 5
},
{
name: 'Moises (54) offline',
printing: false,
online: false,
operational: false,
queueFiles: 54
},
{
name: 'Daniel (1) online oper',
printing: false,
online: true,
operational: true,
queueFiles: 1
},
{
name: 'Eva (99) online oper',
printing: false,
online: true,
operational: true,
queueFiles: 99
}
]);
console.log("========")
console.log(collection.pluck('name'))
console.log("========")