2013-04-11 11 views
17

E 'una caratteristica nota di backbone.js che quando si imposta i dati che non è cambiata, non verrà generato l'evento di modifica, né saranno passare attraverso convalide. Ho comunque bisogno l'evento di modifica al fuoco come sto memorizzare una risposta JSON da una chiamata AJAX che immagazzina i risultati di convalida backend. Se l'utente continua a inviare il modulo lasciando lo stesso campo vuoto, la convalida del backend restituirà lo stesso risultato JSON e quando lo salverò nel modello non attiverà l'evento change.backbone.js trigger cambiano quando il valore non cambia

Un paio di cose che ho provato nel successo di callback AJAX in cui ho impostato i dati nel modello:

Soluzione Tentativo # 1

t.model.unset('fieldErrors',{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

tentata soluzione # 2

t.model.set({fieldErrors: null},{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

Nessuno di questi risultati in caso cambiamento sparano una seconda volta quando la chiamata è fatta e l'utente ha la stessa JSONResponse.

+0

Se non hai paura di boilerplate, si veda la risposta di ScottPuleo. In caso contrario, è possibile ignorare il metodo 'Model # set' di sparare sempre un evento personalizzato (vi posterò una risposta su come se siete interessati). – Loamhoof

risposta

27

attivare manualmente l'evento change:

t.model.trigger('change', t.model); 

o

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue); 
+5

dovrebbe probabilmente mai essere utilizzato Questo secondo caso (di un'opzione casuale). Il metodo 'trigger' è tutto ciò che è necessario qui. Ricordarsi di passare i parametri necessari in quanto backbone non lo farà automaticamente quando si esegue il trigger manualmente. –

+2

Nota: "Questo secondo caso" si riferisce ad un vecchio caso che nel frattempo è stato rimosso. – Chris

+0

@Scott Puleo Questa è una vecchia domanda, ma mi stavo chiedendo se potessi spiegare perché dobbiamo passare il modello stesso come secondo argomento a "trigger"? Quando non lo faccio, 'Collection._onModelEvent' - che viene chiamato più tardi - non riceve il modello. Mi sembra che 'model.trigger ('change')' dovrebbe essere sufficiente per inoltrare il modello a quell'evento successivo. Sai perché non lo è? (scusa se la mia domanda non è chiara ...) – arnaudrg

Problemi correlati