2013-04-11 4 views
6

Ich habe meiner Sammlung ein Modell hinzugefügt und Model.save erstellt Die Daten werden auf dem Server gespeichert.Wie funktioniert collection.fetch ({add: true})?

Danach rufe ich collection.fetch ({add: true}). Im Idealfall sollte nur ein Modell vom Server zurückgegeben werden, dh das neu hinzugefügte, aber ich sehe, dass die gesamte Sammlung im Tool für Chrome-Entwickler zurückgespielt wird.

Ich bin verwirrt. Wie funktioniert das eigentlich?

Antwort

14

Als Add-on zu Cyril N. Antwort (die im Wesentlichen das Standardverhalten beschreibt, und sollte genug sein, glaube ich), ich möchte mehr gründlich die Rolle der drei Fahnen erklären:

  • add: ob oder nicht Backbone sollte die Sammlung erstellen und fügen Sie die Modelle, die noch nicht existieren (dh deren ID nicht in der Sammlung)
  • remove: ob oder nicht Backbone aus der Sammlung entfernen sollte die Modelle, die nicht vom Server zurückgebracht wurden (dh deren ID nicht die zurückgegebenen Daten waren)
  • merge: ob oder nicht Backbone sollte die Modelle aktualisieren, die nicht in den ersten beiden Kategorien sind (bereits in der Sammlung, und vom Server geholt)

Allerdings Ich mag ein bisschen weiter über die allgemeinen erweitern Verhalten der Methode (es verwendet die Collection#set Methode als Callback, so ist es mehr das Verhalten der Collection#set). Backbone bereitet die Modelle vor, was bedeutet, dass am Anfang der Methode gefälschte, flüchtige Modelle erstellt werden (sie sind nur flüchtig, wenn sie nicht hinzugefügt werden). Dies kann zu unerwartetem Verhalten führen: Da es Modelle erstellt, wird die Initialisierungsmethode ausgeführt.

Auch als Randnotiz seit Backbone 1.0, das Collection#reset Flag wurde eingeführt, wenn Sie Ihre Sammlung beim Abrufen zurücksetzen möchten (daher wird diese Methode als Rückruf verwendet). Vorher war es das Standardverhalten der Collection#fetch-Methode.

Nun, mit beiden Antworten sollten Sie alle Informationen haben, die Sie benötigen, denke ich.

4

Wenn Sie collection.fetch({add:true} anrufen, wird Backbone den Server mit der vollständigen Liste der Elemente in der Sammlung anfordern (daher die gesamte Sammlung im Tool für Chrome-Entwickler), aber dann statt die gesamte Sammlung im Collection Object neu zu laden in Backbone (Javascript), wird Backbone führt eine "intelligente" Aktualisierung der Sammlung.

Die set-Methode führt eine "intelligente" Aktualisierung der Sammlung mit der bestandenen Modellliste durch. Wenn ein Modell in der Liste noch nicht in der Sammlung ist, wird es hinzugefügt; Wenn das Modell bereits in der Sammlung ist, werden seine Attribute zusammengeführt; und wenn die Sammlung Modelle enthält, die nicht in der Liste enthalten sind, werden sie entfernt. Alle entsprechenden "hinzufügen", "entfernen" und "ändern" Ereignisse werden ausgelöst, wie diese geschieht. Wenn Sie das Verhalten anpassen möchten, können Sie es mit den Optionen deaktivieren: {add: false}, {remove: false} oder {merge: false}.

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

die alle smart Arbeit Client-Seite gemacht, in Javascript, aber für das, Backbone Wunsch die gesamte Kollektion vom Server es mit zu vergleichen, was hat es in lokalen (Client-Seite) .

(Ich hoffe, ich bin klar;)).