Текущий метод, который я использую, заключается в фильтрации коллекции, которая возвращает массив, и использовании
collection.reset(array)
повторно -заполнить его. Однако это изменяет исходную коллекцию, поэтому я добавил массив с именем originalCollectionArray, который отслеживает исходное состояние массива коллекции. Когда фильтрация не активна, я просто использую
collection.reset(originalCollectionArray)
Но тогда мне нужно отслеживать добавление и удаление моделей из реальной коллекции, поэтому я сделал это:
// inside collection
initialize: function(params){
this.originalCollectionArray = params;
this.on('add', this.addInOriginal, this);
this.on('remove', this.removeInOriginal, this);
},
addInOriginal: function(model){
this.originalCollectionArray.push(model.attributes);
},
removeInOriginal: function(model){
this.originalTasks = _(this.originalTasks).reject(function(val){
return val.id == model.get('id');
});
},
filterBy: function(params){
this.reset(this.originalCollectionArray, {silent: true});
var filteredColl = this.filter(function(item){
// filter code...
});
this.reset(filteredColl);
}
Это быстро становится громоздким, поскольку я пытаюсь реализовать другие приемы, связанные с манипулированием коллекцией, такие как сортировка. И, честно говоря, мой код выглядит немного хакерским. Есть ли элегантный способ сделать это?
Спасибо