2012-05-14 7 views
5

ho una molto semplice configurazione ...Backbone.js Sync non determina alcun evento sul modello

Un percorso è l'installazione che richiama una finestra di dialogo modale utilizzando bootstrap. Il headerView chiama un metodo quando si fa clic su un menu -

menuClick: function(e){ 
    e.preventDefault(); 
    if (!this.myView) { 
     this.myView= new MyView({model: new MyModel()}); 
    } 
    this.myView.render(); 
}, 

Nel MyView chiamo legano nel inizializzare

initialize: function(){ 
    this.model.bind('sync', function(model){ alert('test view')}); 
} 

E chiamare Backbone.sync in un evento click del pulsante:

var response = Backbone.sync('read', this.model, { 
    success: function(data, textStatus, jqXHR) { alert('success'); }, 
    error: function(data, textStatus, jqXHR){ alert(fail); } 
}); 

L'avviso all'interno della sincronizzazione viene chiamato ... ma l'avviso nel comando di associazione nell'inizializzazione non viene mai chiamato. Provato a spostare il bind all'interno del modello, spostandolo, ho anche provato la sincronizzazione: fail, sync: done. Nessun successo.

+0

Sovrascrivere il 'Backbone.sync' è complicato, e sembra strano chiamarlo direttamente .. Perché non usi i comandi di livello alto come' Model.fetch() '? – fguillen

risposta

4

Non ogni caso viene attivato perché non hai detto così. Stai passando espliciti callback success e error che devono essere responsabili dell'attivazione degli eventi.

il nativo Backbone.sync chiamate dalla strato ad alta comandi come save, create, fetch ricevere success e error callback quelli innescare gli eventi, ma si utilizza il proprio modo questo comportamento nativo è ovviato.

per example in the Model.save, in the Model.destroy e così via.

Ma, come ho detto in un commento precedente, dovresti davvero pensare se hai davvero bisogno di chiamare Backbone.sync direttamente invece di usare metodi di livello superiore come Model.fetch().

2

cercare di attuare il Backbone.sync in questo modo:

var sync = Backbone.sync; 
Backbone.sync = function (method, model, options) { 
    var success = options.success; 
    options.success = function (resp, status, xhr) { 
     //Your logic goes here 
     console.log('succeed'); 
     if (success) success(resp, status, xhr); 
    }; 
    options.error = function (xhr, ajaxOptions, thrownError) { 
     console.log('failed'); 
    } 
    sync(method, model, options); 
}; 
Problemi correlati