#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 часто можно использовать функцию вместо значения, если вам требуется дополнительная функциональность.