Как правильно выполнить обратную сортировку коллекции BackboneJS?

#sorting #backbone.js #codeigniter-3 #backbone.js-collections

#сортировка #backbone.js #codeigniter-3 #backbone.js-collections

Вопрос:

У меня есть таблица, в которой отображается несколько элементов.

 <table>
...
<th scope="col">Priority <a id="sort"><i class="fas fa-chevron-down"></i></a> <a id="sort2"> 
<i class="fas fa-chevron-up"></i></a></th>
...
</table>
 

Приоритеты содержат целочисленное значение, 1, 2 и 3 соответственно.
Я пытаюсь отсортировать элементы по нажатию кнопки. Мне удалось выполнить сортировку один раз, используя collection.sort() in my view, и она отлично сортируется. Как я могу выполнить обратную сортировку, нажав кнопку sort2 ? Любая помощь в этом отношении приветствуется. Спасибо.

 app.views.ShareView = Backbone.View.extend({
el: ".page",

initialize: function () {},

events:{
    "click #sort" : "sort",
    "click #sort2" : "sort2"
},

sort: function (e){
    e.preventDefault();
    this.collection.comparator = 'priority_id';
    this.collection.sort();
    this.render();
},

 sort2: function (e){
  //reverse sort
}

 render: function () {
    template = _.template($('#share-template').html());
    this.$el.html(template(app.userShare.attributes));
 }
 });
 

Ответ №1:

Вам нужно использовать функцию сравнения сортировки вместо comparator свойства. Это позволяет вам указать функцию сравнения вместо просто свойства. Например;

 this.collection.comparator = function(firstModel, secondModel) {
   if(firstModel.priority_id > secondModel.priority_id) { // change to < in order reverse the order
      return -1;
   }
   else if(firstModel.priority_id === secondModel.priority_id) {
      return 0;
   }
   else {
      return 1;
   }
}
this.collection.sort();
 

В BackboneJS часто можно использовать функцию вместо значения, если вам требуется дополнительная функциональность.