#backbone.js
#backbone.js
Вопрос:
У меня есть базовая коллекция :
myCollection = Backbone.Collection.extend({
model: myModel
url: '/theurl',
initialize: function(){
this.fetch();
})
})
При инициализации коллекция получает элементы, упорядоченные по дате.
Я хотел бы иметь возможность динамически изменять порядок коллекции, используя другой атрибут модели (имя, рейтинг и т.д.).
В представлении, связанном с коллекцией, я попытался привязать событие click к обратному вызову следующим образом :
reorderByName: function(){
myCollection.comparator = function(item){
return item.get('name');
});
this.render();
})
К сожалению, это, похоже, не работает. Есть предложения относительно того, как я мог бы это сделать?
Спасибо.
Ответ №1:
Похоже, вы сделали только половину того, что вам нужно сделать. Вы предоставили коллекции ее компаратор, но не сказали ей прибегать к нему самой. Итак, вам нужно добавить что-то вроде этого оператора прямо перед рендерингом:
myCollection.sort();
Обратите внимание, что это вызовет reset
событие, которое будет получено любым объектом, к которому вы привязали это событие. Если вы хотите запретить запуск этого события, вы могли бы выполнить вызов таким образом:
myCollection.sort({silent: true});
Надеюсь, это поможет.
Комментарии:
1. Да, по какой-то причине я пропустил «сортировку» в документах … Спасибо за помощь
Ответ №2:
Я нашел это, когда искал решение своих собственных проблем с comparator. Я подумал, что хотел бы добавить, на случай, если кто-нибудь еще обнаружит этот вопрос, что если модели в ваших коллекциях имеют неопределенные значения для свойства, по которому сортирует ваш компаратор, сортировка не произойдет. Обязательно используйте значения по умолчанию в вашей модели, если они не требуются, и вы собираетесь сортировать по ним. 😉