2013-04-11 12 views
6

Ho aggiunto un modello alla mia raccolta e ho fatto model.save I dati vengono salvati sul server.Come funziona collection.fetch ({add: true})?

Dopo questo chiamo collection.fetch ({add: true}). Idealmente, solo un modello dovrebbe essere restituito dal server, ovvero quello appena aggiunto, ma sto vedendo l'intera collezione essere propagata nello strumento degli sviluppatori di Chrome.

Sono confuso. come funziona davvero?

risposta

14

Come un add-on per la risposta di Cyril N. (che descrive essenzialmente il comportamento predefinito, e dovrebbe essere abbastanza immagino), mi piacerebbe spiegare più a fondo il ruolo dei 3 bandiere:

  • add: se Backbone dovrebbe creare e aggiungere alla collezione i modelli che non esistono ancora (per esempio, il cui id non sono nella collezione)
  • remove: se Backbone dovrebbe rimuovere dalla collezione modelli che non sono stati portati dal server (ad esempio, il cui id sono stati non è il portato di nuovo i dati)
  • merge: se Backbone dovrebbe aggiornare i modelli che non sono nelle prime due categorie (già della collezione, e riportato dal server)

Tuttavia, mi piace per espandere un po 'più sul generale comportamento del metodo (utilizza il metodo Collection#set come callback, quindi è più il comportamento di Collection#set). Backbone prepara i modelli, il che significa che crea falsi modelli, volatili all'inizio del metodo (sono volatili solo se non sono aggiunti). Questo può portare a comportamenti imprevisti: poiché crea modelli, il metodo di inizializzazione di quelli viene eseguito.

Inoltre, come nota a margine, poiché Backbone 1.0, il flag Collection#reset è stato introdotto se si desidera ripristinare la raccolta durante il recupero (quindi utilizza questo metodo come callback). Prima di ciò, era il comportamento predefinito del metodo Collection#fetch.

Bene, con entrambe le risposte dovresti avere tutte le informazioni che ti servono immagino.

4

Quando si chiama collection.fetch({add:true}, Backbone richiede al server l'elenco completo degli elementi nella raccolta (da cui l'intera raccolta visualizzata nello strumento per sviluppatori di Chrome), ma poi, invece di ricaricare l'intera raccolta nell'oggetto di raccolta in Backbone (Javascript), Backbone eseguirà un aggiornamento "intelligente" della raccolta.

Il metodo set esegue un aggiornamento "intelligente" della raccolta con l'elenco di modelli passati . Se un modello nell'elenco non è ancora nella raccolta , verrà aggiunto; se il modello è già nella collezione i suoi attributi saranno uniti; e se la raccolta contiene modelli non presenti nell'elenco, verranno rimossi. Tutte le appropriato "aggiungere", "rimuovi", e gli eventi "cambiamento" vengono sparati in quanto questo accade. Se desideri personalizzare il comportamento, puoi disabilitarlo con con le opzioni: {add: false}, {remove: false}, o {merge: false}.

Fonte: http://backbonejs.org/#Collection-set

Tutto il lavoro intelligente è fatto lato client, in Javascript, ma per questo, richiesta di Backbone l'intera collezione dal server per confrontare con quello che offre oggi (lato client) locale .

(spero di essere stato chiaro;)).

Problemi correlati