Backbone.js: maneira correta de filtrar uma coleção?
O método atual que estou usando é filtrar uma coleção, que retorna uma matriz e usa
collection.reset(array)
para repovoá-lo. No entanto, isso modifica a coleção original, então eu adicionei uma matriz chamada "originalCollectionArray", que mantém o controle do estado inicial da matriz da coleção. Quando nenhuma filtragem está ativa, simplesmente uso
collection.reset(originalCollectionArray)
Mas então, preciso acompanhar a adição e a remoção de modelos da coleção real, então fiz isso:
// 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);
}
Isso está rapidamente se tornando complicado à medida que tento implementar outros truques relacionados à manipulação da coleção, como a classificação. E, francamente, meu código parece um pouco hacky. Existe uma maneira elegante de fazer isso?
obrigado