¿Cómo disparo la callback correcta en un model.save ()?

this.model.save({ success: function(model, response){ console.log('success'); }, error: function(){ console.log('error'); } }) 

El modelo se publica correctamente en el servidor que gestiona el guardado, pero la callback exitosa no se activa. ¿Debo enviar algo desde el servidor?

El primer argumento de guardar es los atributos para guardar en el modelo:

 this.model.save( {att1 : "value"}, {success :handler1, error: handler2}); 

Por alguna razón desconocida , ninguno de los métodos anteriores funcionó para mí. La api solo no fue golpeada en mi caso.

Pero más tarde mientras buscaba en esto, me topé con este enlace , donde alguien había intentado con null lugar de {} como el primer parámetro.

 this.model.save(null, { success: function (model, response) { console.log("success"); }, error: function (model, response) { console.log("error"); } }); 

entonces, esto funcionó para mí. Espero que esto le ayude también.

Su servidor debe devolver un objeto JSON. Si la respuesta no es un objeto JSON, las devoluciones de llamada no se activarán.

Si para el éxito su servidor no devuelve un objeto JSON, realice una opción de guardar con dataType: “text” , como esta:

 this.model.save([],{ dataType:"text", success:function() {}, error:function() {} }); 

Con esta opción no estará esperando un JSON en respuesta, sino un texto, y así se lanzará la callback.

Puedes usar la lib de subrayado de la siguiente manera ya que la red troncal ya depende de esto. Recuerde que el primer argumento de guardar debe tener atributos o simplemente puede pasar {} en caso de que quiera guardar el modelo.

 this.model.save({}, _.bind(function(model, response){ //Do whatever you want eg this.collection.add(model) }, this)) 

así que estoy un poco confundido, ¿todavía necesito pasar todos los atributos para poder llamar a un evento guardado? ¿Qué pasa si mi modelo es grande? No deseo configurar cada propiedad manualmente

im calling model.save e bash hacer lo siguiente:

 this.model.save( { success: function (model, response) { console.log('model saved'); } }); 

ok solo para responder mi propia pregunta en caso de que alguien encuentre esta publicación, hice lo siguiente que funciona:

 this.model.save({ id: this.model.get('id') }, { success: function (model, response) { console.log("success"); }, error: function (model, response) { console.log("error"); } }); 

EDITAR: No pude responderte por alguna razón, pero puedo editar

pero no tiene que establecer id: this.model.get('id') simplemente puede pasar un objeto en blanco porque un atributo en blanco simplemente no ampliará los atributos, no hace nada:

 this.model.save({}, { success: function (model, response) { console.log("success"); }, error: function (model, response) { console.log("error"); } }); 

El siguiente es el código que estoy usando para guardar el modelo de red troncal.

 this.model.save(model,{ success:function(model){ console.log("Saved Successfully"); }, error:function(model){ console.log("Error"); } }); 

Aclamaciones

Roy MJ

Para aquellos que desean guardar un modelo, sin actualizar los atributos, puede hacer lo siguiente:

 model.once("sync", function(model, response, options){ // }); model.once("error", function(model, response, options){ // }); model.save(); 

En su función de inicialización, vincule el método de sincronización a un método que defina (onSaveSuccess)

  initialize: function (options) { this.model.on('sync', _.bind(this.onSaveSuccess, this)); }, onSaveSuccess: function() { console.log('saved'); this.render(); }, 

De esta forma, cada vez que ejecute this.model.save (), ejecutará la función onSaveSuccess como una callback si su sincronización es exitosa