backbone.js - template - Backbone model.destroy(): ¿Es necesaria la eliminación explícita de la recopilación?
github backbone (2)
La solución es anular la función de destrucción del modelo Backbone. Hice esto en un modelo abstracto con éxito y estrategia de devolución de llamada:
El parámetro "datos" corresponde al parámetro original "resp".
destroy: function(successCallback, errorCallback)
{
var options = { wait: true };
var model = this;
successCallback = successCallback || function() {};
errorCallback = errorCallback || function() {};
var destroy = function()
{
model.trigger(''destroy'', model, model.collection, options);
};
options.success = function(data)
{
if (''SUCCESS'' === data.responseCode)
{
if (options.wait || model.isNew())
destroy();
successCallback(data);
if (!model.isNew())
model.trigger(''sync'', model, data, options);
}
else
{
errorCallback(data);
}
};
if (this.isNew())
{
options.success();
return false;
}
var xhr = this.sync(''delete'', this, options);
if (!options.wait)
destroy();
return xhr;
}
Tengo una pregunta simple Estoy buscando una función con 2 líneas de código:
deleteTask: function() {
this.parent.collection.remove(this.model);
this.model.destroy();
}
Si hago un comentario sobre la primera línea, que se supone que elimina el modelo de su colección, las cosas parecen funcionar según lo previsto (como en, el modelo se elimina automáticamente). Desde el sitio web de Backbone, esta es la descripción relevante para la función de "destrucción" de un modelo:
Desencadena un evento de "destrucción" en el modelo, que se disparará a través de cualquier colección que lo contenga.
¿Puedo suponer con seguridad que la eliminación de this.parent.collection.remove(this.model);
no afectará la funcionalidad del código de ninguna manera? Esto es lo que pienso, pero quería asegurarme de eso.
¡Gracias!
Si destruyes un modelo, se elimina de cualquier colección que lo contenga. Puedes ver eso en la fuente de la red troncal
//Internal method called every time a model in the set fires an event.
_onModelEvent: function(event, model, collection, options) {
...
if (event === ''destroy'') this.remove(model, options);
Entonces, sí, no creo que deba eliminar el modelo de su colección de forma explícita.
Pero no confíes en mí, prueba por ti mismo :)
deleteTask: function() {
that = this;
this.model.destroy({
success: function() {
console.log(that.parent.collection);
}
});
}
Consulte la consola para ver si el modelo se eliminó de la colección.