Backbone.js: poprawny sposób filtrowania kolekcji?

Aktualna metoda, której używam, polega na filtrowaniu kolekcji, która zwraca tablicę i używa

collection.reset(array)

aby go ponownie wypełnić. Jednak modyfikuje to oryginalną kolekcję, więc dodałem tablicę o nazwie „originalCollectionArray”, która śledzi początkowy stan tablicy kolekcji. Gdy filtrowanie nie jest aktywne, po prostu używam

collection.reset(originalCollectionArray)

Ale potem muszę śledzić dodawanie i usuwanie modeli z prawdziwej kolekcji, więc zrobiłem to:

// 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);
}

Szybko staje się to kłopotliwe, ponieważ próbuję wdrożyć inne sztuczki związane z manipulowaniem kolekcją, takie jak sortowanie. I szczerze mówiąc, mój kod wygląda trochę hacky. Czy jest na to elegancki sposób?

Dzięki

questionAnswers(2)

yourAnswerToTheQuestion