So speichern Sie eine Sammlung mit backbone.js

7

Ich habe eine Hierarchie von Kategorien. Ich benutze eine jquery-Bibliothek für die Hierarchie, um alles durcheinander zu bringen, wie der Benutzer es möchte. Dann klicken sie auf Speichern. Die ursprüngliche Hierarchie und Hierarchie, die gespeichert werden sollen, könnte also völlig anders sein.

Die Hierarchie wird als eine Sammlung dargestellt und ich verwende parentIds, um eine Struktur mit den Tags ol und li zu erstellen.

Wenn der Benutzer auf "Speichern" klickt, muss ich alle Elemente in der Sammlung mit ihrer neuen parentId aktualisieren und diese jeweils mit dem Server synchronisieren.

Ich frage mich, ob jemand einen Ratschlag hat, wie man hier vorgeht. Ich habe in der Dokumentation für Backbone.sync gesehen, "Verwenden Sie setTimeout , um Rapid-fire-Updates im Batch in einer einzigen Anfrage zu speichern." Also, wenn ich das richtig verstehe, würde ich jeden der Anrufe an Backbone.sync und Verwenden Sie dann setTimeout, um meine Warteschlange nach einigen Sekunden an den Server zu senden?

Wenn ich Backbone.sync neu schreibe, brauche ich auch nicht irgendwo eine "save" -Methode für die Sammlung, die den JSON der Antwort analysiert (die Serverantwort müsste eine Liste von Objekten zurücksenden) und Rufen Sie dann model.set für jedes Element in der Sammlung auf? Hat jemand einen Beispielcode?

Danke!

    
Nick Lang 02.11.2011, 02:52
quelle

2 Antworten

6

Ich bin mir nicht sicher, ob ich den Kontext vollständig verstehe. Es ist in etwa so: Sie haben eine Sammlung mit allen Kategorien und behalten die Hierarchie mit der Eigenschaft parentId . Der Benutzer ändert die Hierarchie und möchte die Hierarchie speichern (implizit speichern Sie die Sammlung, die jetzt andere parentId enthält).

Wenn das stimmt, würde ich Folgendes tun:

  • Machen Sie eine PUT / categories-Aktion, die einen Hash von {id: parentId} akzeptiert, und aktualisiert alle Kategorien mit diesen Daten.
  • Beim Speichern würde ich Backbone.sync('update', categories_collection, {data: a_hash_of_{id:parent_id}, success: your_success_callback) aufrufen. Dies sollte ohne weitere Überschreibungen funktionieren, wenn Sie url für Ihre Kategorien angeben, und Sie können die Sammlung im Erfolgsrückruf einfach mit den neuen Daten zurücksetzen.

Dies ist kein vollständiger REST, aber es hat den Vorteil, dass nur eine Aktualisierungsanforderung ausgelöst wird, egal wie viele Kategorien Sie haben.

    
dira 02.11.2011, 11:31
quelle
21

Am Ende habe ich eine updateAll -Methode in mein Sammlungsmodell eingefügt. Das hat wie ein Traum funktioniert:

%Vor%

Im Backend (ich benutze PHP) erhalte ich nur die Daten und speichere sie in meiner Datenbank und gebe eine neue Sammlung im JSON Format zurück.

    
Nick Lang 02.11.2011 20:35
quelle