2012-05-14 6 views
10

Ho un modello di raccolta Backbone (con sotto-modelli come elementi) e viste per modificarlo.Come disabilitare Backbone.sync per un nuovo modello e riattivare la sincronizzazione * dopo * l'utente preme un pulsante di salvataggio

mi sarebbe piaciuto che quando il modello viene inizialmente creato, a "spegnere" sincronizzazione, in modo che il back-end non è mai invocato fino l'utente fa clic su un pulsante , quindi vorrei "accendere "la sincronizzazione e richiama il metodo di salvataggio sul modello root, per salvarlo nel DB. Una volta salvato, il modello dovrebbe comportarsi come un modello normale.

L'obiettivo è di evitare il salvataggio fino a quando l'utente non si accorge che è contento di cosa ha inserito.

risposta

17

Backbone cercherà inizialmente la funzione locale sync di un modello prima di passare a Backbone.sync.

Backbone.js Documentation: La funzione di sincronizzazione può essere sovrascritto globalmente come Backbone.sync, o ad un livello di granularità, aggiungendo una funzione di sincronizzazione di una raccolta dorsale o ad un singolo modello.

Pertanto si può fare questo:

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

E 'stata una risposta molto veloce, grazie! Sono contento di sapere che è così semplice. –

Problemi correlati