underscore template backbonejs model backbone.js destroy

model - template - backbonejs github



Backbone JS: ¿cómo deshabilitar la sincronización para eliminar? (5)

Esto es un poco tarde, pero podría funcionar como una solución alternativa para otras personas que tienen el mismo problema.

Enfrentado a un problema muy similar, terminé configurando todas las identificaciones de los niños en null antes de llamar a destroy . De esta manera, el backbone piensa que son nuevos y no genera una solicitud DELETE HTTP al servidor al eliminarlo.

deleteParent: function() { this.model.children.each(function(child) { // Set to null so that it doesn''t try to spawn a ''DELETE'' http request // on ''destroy'' since thinks its new (hack). child.id = null; child.destroy(); }); // This one DOES result in a ''DELETE'' http request since it has an ID. this.model.destroy(); },

Estoy tratando con una colección de comentarios model.destroy() , y cuando model.destroy() un comentario que tiene hijos, hago model.destroy() para este comentario, y en el lado del servidor todas sus sucursales se eliminan.

Escribí una función que, una vez que se elimina un nodo del árbol, busca a todos los huérfanos y los elimina también. Entonces, cuando encuentro huérfanos, también ejecuto model.destroy() en ellos, pero como ya están eliminados en el servidor, la sincronización devuelve errores.

¿Hay alguna manera de desactivar la sincronización para algunas llamadas destroy() ?


Esto le permite respetar la llamada a la destrucción, incluidos los controladores de éxito.

Backbone.Model.extend({ destroy: function (options) { // don''t make a server call, just delete from collection and call success this.trigger(''destroy'', this, this.collection, options); if (options && options.success) { options.success(); } } });


Me encontré con este mismo problema.

Usar el enlace del modelo a su colección que contiene para eliminar el modelo de esa colección fue mi solución preferida, ya que esto era exactamente lo que quería hacer y está muy claro en el código:

// From the view this.model.collection.remove(this.model);


Sobre la base de la respuesta de fcarriedo, simplemente anule el método de destrucción en la declaración de su modelo:

Models.YourModelName = Backbone.Model.extend({ destroy: function () { this.id = null; Backbone.Model.prototype.destroy.apply(this, arguments); } });


Ya que todo lo que hace el método de destroy es enviar una solicitud de BORRAR y desencadenar la destroy , simplemente desencadenar la destroy es exactamente lo que estás buscando.

model.trigger(''destroy'', model, model.collection, options);

Sí, se siente un poco pirateado, pero eso es casi todo lo que hace el código de Backbone de todos modos. Si lo desea, y si tiene un modelo base del que se extiende, puede agregarlo como un método en ese modelo base y es posible que no le parezca tan intrincado.