2017-06-01 4 views
0

In meiner Anwendung suche ich nach Dokumenten mit Abfrage. Dann bearbeite ich ein Attribut in einem einzelnen Dokument, und dann rufe ich die Suchanfrage erneut auf.Wie verliere ich nicht viele Änderungen an der Ember-Abfrage?

Ergebnis ist OK, ich sehe Dokument immer noch in einem schmutzigen Zustand mit geänderten Attribut.

Dann wähle ich wieder eines der Dokumente und bearbeite seine hasMany Beziehung (von 2 Artikel zu 4 Artikel). Und dann rufe ich die Suchanfrage erneut an. Ergebnis ist NICHT OK, hat viele Relation Änderung verloren/entsorgt/Rollback.

Gibt es einen Weg, so Ember-Abfrage (ich denke, es ist einige Ember interne Reload) Rollback nicht gespeichert relation Änderungen nicht?

I Ember 2.9.1

Vorerst verwende ich habe keine andere Art und Weise als jede Filterabfrageaktionen oder Routen Aktionen etwas zu verbieten, die Abfrage erneut aufrufen könnte, da die Daten, die vom Benutzer eingestellten verloren verursachen würde.

Antwort

1

Embers store.query Methode referenziert immer die Modelle aus dem Backend (im Gegensatz zu den find* Methoden). Mit einer Abfrage können Sie nur sicherstellen, dass Sie über die aktuellsten Daten verfügen (und dass die in den Speicher geladenen Modelle noch gültig sind). Selbst in Ihrer Instanz können unerwartete Ergebnisse auftreten, wenn Sie die Daten so ändern, dass sie Ihren Abfragekriterien nicht mehr entsprechen.

Wenn Sie Änderungen zwischen Abfragen beibehalten möchten, würde ich empfehlen, eine Kopie aller Modelle, die schmutzig sind, zu erstellen (überprüfen Sie das hasDirtyAttributes Attribut). Sie können sie mit peekAll sammeln. Einmal kopiert, können Sie dann die query machen und die Datensätze nach ID patchen. Vielleicht mit .

Selbst wenn ich diese Methode verwende, würde ich immer noch denken, dass Sie Probleme bekommen, die Änderungen zu verfolgen und sicherzustellen, dass die Datensätze konsistent mit Ihrer Anfrage bleiben. Wie geht es Ihnen, wenn dieser Datensatz nicht zurückgegeben wurde (gelöscht auf dem Server oder nicht mehr Ihren Kriterien entspricht)? Fallen Sie Ihre Änderungen ab? Was ist, wenn Sie einen Konflikt zwischen den Daten vom Server und Ihrer lokalen Version haben (z. B. hat ein anderer Benutzer die hasMany-Beziehung gepatcht, die der andere Benutzer jetzt abfragt und modifiziert)?

ember-changeset scheint es könnte hier nützlich sein. Es ist jedoch nicht offensichtlich, wie Sie eine ChangeSet auf eine neue Instanz desselben Modells anwenden können. Obwohl es möglich sein kann, einen snapshot zu behalten und sie manuell zusammenzustellen. Sie stoßen jedoch immer noch auf Datenkonsistenzprobleme.

+0

Am besten wäre, wenn Abfrage meine bearbeiteten Aufgaben überhaupt nicht aktualisiert hat. Benutzer wird Aufgabenabteilungen bearbeiten (immer noch nicht speichern). Dann wird er klicken, um nicht abgeschlossene Aufgaben zu sehen, wo auch eine bearbeitete Position zwischen ihnen liegt und die BOOM-Abteilungen zurückrollen. Wenn es in der Zwischenzeit gelöscht wurde, wird das Speichern von API darauf reagieren. Wenn es geändert wird, das kann jederzeit in jeder Web-Anwendung passieren, sogar eine Millisekunde nach der Änderung durch den Benutzer, sein Web, API wird sich mit dem Überschreiben der letzten oder Konfliktlösung beschäftigen. Beim Aufrufen von Reload auf Modell-Beziehungen sind nicht verloren, aber mit der Abfrage sind sie :( –

Verwandte Themen