2012-01-17 12 views
7

Nella mia applicazione sovrascrivo Backbone.sync come segue:Come chiamare genitore metodo spina dorsale di sincronizzazione

Backbone.sync = function(method, model, options){ 
    //Some custom code 

    //THIS FAILS. 
    Backbone.prototype.sync.call(this, method, model, options); 
}} 

La mia domanda è, come faccio a chiamare il metodo di sincronizzazione originale? Devo usare invece questo.sync?

risposta

4

provare qualcosa di simile, potrebbe non essere la soluzione migliore, ma funziona:

 

var parentSyncMethod = Backbone.sync; //save parent method, the override 
Backbone.sync = function() { 
    // Your code here. 
    var parentSyncMethod.apply(Backbone, arguments); 
}; 
 

Speranza che aiuta in qualche modo

1

Backbone.prototype.sync.call non funzionerà perché sync non è definito sul prototipo. Ispezionare l'oggetto Backbone nella console per vedere la sua struttura. Prima di eseguire l'override con la tua implementazione, ti consigliamo di assegnare un nome al tuo metodo o di salvare un riferimento al metodo originale sync.

9

Da quello che ho capito, Backbone.sync controlli per vedere se c'è una versione definita a livello locale di sincronizzazione e chiede che prima di chiamare la Backbone.sync globale:

(this.sync || Backbone.sync) 

Quindi, dato che il modello è qualcosa come TestModel. Penso che si possa fare qualcosa di simile (perdono, me questa potrebbe non essere la sintassi corretta, javascript è lontano dalla mia specialità):

var TestModel = Backbone.Model.extend({ 

    "sync": function(method, model, options) { 
     //Some custom code 

     Backbone.sync(method, model, options); 
    } 
}); 

Questo è quello che ho raccolto da here e here

+3

Ho usato questo approccio in precedenza e ho scoperto che funziona bene, soprattutto se è necessaria una sincronizzazione specifica del modello. Alterare direttamente Backbone.sync (come mostrato in un'altra risposta) interesserà tutti i modelli, il che potrebbe non essere quello di cui hai bisogno. – erturne

4
var TestModel = Backbone.Model.extend({ 
    sync: function(method, model, options){ 
     // some code here 
     return Backbone.sync(method, model, options); 
    } 
}); 
Problemi correlati