2012-05-14 20 views
10

Tengo un modelo de colección Backbone (con submodelos como elementos) y vistas para editarlo.Cómo deshabilitar Backbone.sync para un nuevo modelo y volver a habilitar la sincronización * después * el usuario pulsa el botón Guardar

me gustaría que cuando se crea inicialmente el modelo, para "apagar" sincronización, por lo que la parte de atrás no se invoca hasta el usuario hace clic en un botón , entonces me gustaría "encienda "la sincronización e invoque el método de guardar en el modelo raíz, para guardarlo en la base de datos. Una vez que se guardó el modelo, debería comportarse como un modelo normal.

El objetivo es evitar el guardado hasta que el usuario determine que está satisfecho con lo que ha ingresado.

Respuesta

17

Backbone buscará inicialmente la función sync local de un modelo antes de ir a Backbone.sync.

Backbone.js Documentation: La función de sincronización puede ser anulado globalmente como Backbone.sync, o en un nivel más fino, mediante la adición de una función de sincronización a una colección Backbone o a un modelo individual.

Por lo tanto usted puede 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() }); 
+0

Esa era una respuesta muy rápido, gracias! Me alegra saber que es así de simple. –

Cuestiones relacionadas