El método actual que estoy usando es filtrar una colección, que devuelve una matriz, y utilizarBackbone.js: ¿forma correcta de filtrar una colección?
collection.reset(array)
para volver a llenarla. Sin embargo, esto modifica la colección original, así que agregué una matriz llamada "originalCollectionArray" que realiza un seguimiento del estado inicial de la colección. Cuando no hay filtrado está activo simplemente uso
collection.reset(originalCollectionArray)
Pero entonces, necesito hacer un seguimiento de la adición y la eliminación de los modelos de la colección real, por lo que hice esto:
// 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);
}
Esto se está convirtiendo rápidamente engorroso como trato de implementar otros trucos relacionados con la manipulación de la colección, como la clasificación. Y francamente, mi código parece un poco hacky. ¿Hay una manera elegante de hacer esto?
Gracias
¿Hay alguna razón por la que no sólo se utiliza 'fetch ({añadir: true}) 'en lugar de restablecer? Parece que esto es lo que intentas lograr. No estoy seguro de lo que está haciendo su función 'filter', pero siempre puede pasar' {data: {...}} 'para recuperarla también. – bvulaj
Si entiendo correctamente, quiere que coloque originalCollectionArray y sus eventos por completo y busque los datos originales cada vez que hago un filtro/clasificación (la ordenación se ejecuta en los datos filtrados, por lo que cada clasificación también debe buscar y filtrar). El caso es que el filtro se activa a partir de la entrada del usuario. Pensé que desperdiciaría demasiado recurso. Sin embargo, solo estoy hablando hipotéticamente. – chenglou