セットアップは次のとおりです。
ユーザーはページ「A」にいます。ナビゲーションに使用されるドロップダウン (DROPDOWN) があります。ユーザーが選択できるオプションは、A、B の 2 つです。A は現在のページを表し、B はユーザーが移動したいページを表します。
このドロップダウンは、そのドロップダウンの状態を保持する別の通常のオブザーバブル (TARGET) を読み取ることができ、書き込むこともできない場合もある従属オブザーバブル (GUARD) にバインドされます。
ドロップダウン <-- --> ガード <-- ?--> ターゲット
アイデアは、ユーザーがドロップダウンで何かを選択してページから移動した場合、最初に未保存の変更があるかどうかを確認し、保存されていない変更がある場合は、それらを破棄するか、ページにとどまって編集を続けるかをユーザーに尋ねるというものです。 .
状況: 保存されていない変更があります。ユーザーはドロップダウンから何かを選択します。GUARD は、その「書き込み」メソッドが呼び出されることによって開始されます。変更を破棄してページから移動するか、留まるかをユーザーに確認します。ユーザーは滞在を選択します。「問題ありません」と言い、書き込みメソッドは何もしないので、ターゲットのオブザーバブルはそのまま残ります。話の終わり!しかし..
ユーザーがドロップダウンに触れ、「変更」さえキャンセルされなかったため (バインドされたオブザーバブル内でそれを行う手段はありません)、ユーザーがページから移動することを選択したかのように、ドロップダウンは「B」の状態になりました。
だから私の質問は簡単です:
ドロップダウンがバインドされている依存オブザーバブルの「書き込み」メソッド内から「変更」イベントをキャンセルする方法はありますか?
いいえの場合、ドロップダウンの選択を TARGET オブザーバブルと同期させたまま、この状況から抜け出すにはどうすればよいですか?