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("========")