Hier ist das Setup:
Ein Benutzer befindet sich auf der Seite "A". Es gibt ein Dropdown (DROPDOWN) zur Navigation. Es gibt 2 Optionen, aus denen der Benutzer wählen kann: A, B. Wo A die aktuelle Seite repräsentiert und B etwas ist, wohin der Benutzer gehen möchte.
Dieses Dropdown ist an ein abhängiges Observable (GUARD) gebunden, das ein anderes reguläres Observable (TARGET) lesen und möglicherweise SCHREIBEN kann, das den Zustand des Dropdowns enthält.
DROPDOWN <-- --> GUARD <-- ?--> TARGET
Die Idee ist, dass wenn der Benutzer etwas im Dropdown auswählt, um von der Seite wegzunavigieren, erst überprüfen wir, ob ungespeicherte Änderungen vorhanden sind und falls ja, fragen wir den Benutzer, ob er sie verwerfen möchte oder auf der Seite bleiben und mit dem Bearbeiten fortfahren möchte.
Also die Situation: Es gibt ungespeicherte Änderungen. Der Benutzer wählt etwas aus dem Dropdown aus. Der GUARD tritt ein, indem seine 'write'-Methode aufgerufen wird. Wir fragen den Benutzer, ob er die Änderungen verwerfen und die Seite verlassen oder bleiben möchten. Der Benutzer wählt zu bleiben. Wir sagen 'gut' und die 'write'-Methode tut nichts, so dass das Ziel-Observable intakt bleibt. Ende der Geschichte! Aber..
Weil der Benutzer das Dropdown berührt hat und das 'change'-Ereignis nicht abgebrochen wurde (es gibt keine Mittel, dies innerhalb eines gebundenen Observables zu tun), wurde das Dropdown auf den Zustand "B" gesetzt, als ob der Benutzer beschlossen hätte, die Seite zu verlassen.
Also ist meine Frage einfach:
-
Gibt es eine Möglichkeit, das 'change'-Ereignis innerhalb der 'write'-Methode des abhängigen Observables, an das das Dropdown gebunden ist, abzubrechen?
-
Wenn nicht, wie komme ich aus dieser Situation heraus und halte die Auswahl des Dropdowns synchron mit dem TARGET-Observable?