2011-09-28 16 views
5

Ho ereditato un'app basata su backbone js. Mi piace davvero la spina dorsale e sto iniziando a capirlo. Dalla mia comprensione quando model.save viene chiamato su una nuova entità che dovrebbe postare sul server, il server dovrebbe restituire lo stesso json ma con un id allocato e backbone dovrebbe persistere quell'id per il modello in modo tale da risparmiare ulteriormente il risultato in un PUT con l'ID per l'aggiornamento.backbone.js model.save non imposta l'id

Tuttavia, quando chiamo model.save() e quindi provo a ottenere la proprietà model.id, è null.

È perché non lo faccio con una richiamata? Quindi la proprietà non è stata ancora impostata?

Come impostare la richiamata di successo? chiamare model.save({success: function(){...}}) non funziona?

Ecco la chiamata effettiva:

model.save(null, { 
    success: function() { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 
+0

Hai provato a impostare il callback errore di troppo? – mamoo

+0

sì - né si chiama – iwayneo

+0

hai verificato che il server viene effettivamente chiamato? – timDunham

risposta

4

Qualcosa si sente strano in questo. L'impostazione di silent: true fa in modo che nessuno degli eventi venga attivato. Tutto il resto dovrebbe accadere normalmente. In altre parole, non date per scontato che l'impostazione slient: true è la risposta giusta qui ...

Ho il sospetto che in realtà si sta un'eccezione qualche posto (probabilmente con la convalida o qualcosa di simile) e in qualche modo, l'impostazione silent: true sta causando tutto scorrere attraverso.

Suggerisco caldamente di rimuovere questa opzione e controllare la console o eseguire con il debugger ... Ho il sospetto che ci sia un bug in agguato lì intorno.

Alcuni suggerimenti: Date un'occhiata allo annotated source per la funzione model.set. Viene chiamato prima che venga richiamata la tua chiamata success. All'interno di tale funzione, ci sono diverse cose che accadrà se silent è falso. Questi includono validation, singoli trigger property change e un trigger global change. Scommetterei soldi che la convalida sta fallendo o qualcosa che sta ascoltando i cambiamenti sta generando un'eccezione.

+0

OK Domani darò un'occhiata e riferirò :) – iwayneo

+0

Quindi, qual è stato il problema? –

0

avevo bisogno di impostare il silenzio: vera sul salvataggio:

model.save(null, { 
     silent: true, 
     success: function() { 
      alert('success'); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 
+1

Hmmmm ... Sospetto che questa non sia una soluzione casuale, ma stai nascondendo un bug nel tuo codice facendo questo. Dai un'occhiata alla mia risposta. –

0

Ho avuto lo stesso problema, si rivelò essere perché la mia abitudine parse stava fallendo

Problemi correlati