Cómo deshabilitar Backbone.sync para un nuevo model y volver a habilitar la synchronization * después * de que el usuario presione el button Guardar

Tengo un model de colección Backbone (con submodels como elementos) y vistas para editarlo.

Me gustaría que, cuando se crea el model inicialmente, para "desactivar" la synchronization, de modo que nunca se invoque el extremo posterior hasta que el usuario click un button, entonces me gustaría "activar" la synchronization e invocar el guardado método en el model raíz, para savelo en el DB. Una vez que un model se guardó, debería comportarse como un model normal.

El objective es evitar el ahorro hasta que el usuario determine que está contento con lo que ha ingresado.

Backbone inicialmente searchá la function de sync local de un model antes de ir a Backbone.sync .

Documentación de Backbone.js : la function de synchronization puede ser anulada globalmente como Backbone.sync, o en un nivel más detallado, agregando una function de synchronization a una colección de Backbone oa un model individual.

Por lo tanto, puedes hacer esto:

 var MyModel = Backbone.Model.extend({ // New instances of this model will have a 'dud' sync function sync: function () { return false; } }); var MyView = Backbone.View.extend({ ... events : { 'click #my-button' : 'enableSync', 'click #my-save-button' : 'saveModel' }, enableSync: function () { // If this view's model is still pointing to our fake sync function, // update it so that it references Backbone.sync going forward. if (this.model.sync !== Backbone.sync) { this.model.sync = Backbone.sync; } }, saveModel: function () { // This won't actually do anything until we click '#my-button' this.model.save(); } ... }); var view = new MyView({ model: new MyModel() });