Esta es la función de restablecimiento columna vertebral:
reset: function(models, options) {
models || (models = []);
options || (options = {});
for (var i = 0, l = this.models.length; i < l; i++) {
this._removeReference(this.models[i]);
}
this._reset();
this.add(models, _.extend({silent: true}, options));
if (!options.silent) this.trigger('reset', this, options);
return this;
},
Podemos ignorar las últimas 3 líneas porque no se proporciona ningún modelo para el restablecimiento de funciones. También ignoremos las primeras 2 líneas también. Así primer bucle que a través de los modelos de esta colección y llamar al método de la colección _removeReference(model)
, que se ve así:
_removeReference: function(model) {
if (this == model.collection) {
delete model.collection;
}
model.off('all', this._onModelEvent, this);
},
Lo que sucede aquí es que estamos eliminando la colección propiedad del objeto de modelo completo y también retirar el enlace a los eventos de este modelo. Lo siguiente que llamamos _reset()
-función de la colección, que se ve así:
_reset: function(options) {
this.length = 0;
this.models = [];
this._byId = {};
this._byCid = {};
},
Se recoge un poco de plano cualquier referencia a cualquiera de los modelos de la colección ha tenido.
¿Qué podemos hacer con esto? Bueno, la colección reset
-función en Backbone básicamente solo evita todos los canales oficiales de eliminación de modelos y lo hace todo en silencio secreto, no causando más eventos que reset
para ser despedido. Entonces, ¿desea activar el evento remove
del modelo para cada modelo eliminado de una colección durante el reinicio? ¡Fácil! Simplemente sobrescribir Backbone.Collection función de reinicio como este:
var Collection = Backbone.Collection.extend({
reset: function(models, options) {
models || (models = []);
options || (options = {});
for (var i = 0, l = this.models.length; i < l; i++) {
this._removeReference(this.models[i]);
// trigger the remove event for the model manually
this.models[i].trigger('remove', this.models[i], this);
}
this._reset();
this.add(models, _.extend({silent: true}, options));
if (!options.silent) this.trigger('reset', this, options);
return this;
}
});
Hope this helps!
es suficiente, si eso lo hace más claro, gracias rimian – nimrod