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