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

questionAnswers(2)

yourAnswerToTheQuestion