6

私は次のように動作するディレクティブを書いています:

  1. 一部のテキストの編集を許可する (編集可能なコンテンツを使用)
  2. フォーカスを失うと、その値をモデルに保存する必要があります(最近監視され、DBに保存されます)
  3. 変更を元に戻す「元に戻す」ボタンがあるはずです。

私の実装は: http://plnkr.co/edit/DsWEYQV4j51i4GO6KjSe?p=preview

私が持っている唯一の問題は、「元に戻す」ボタンを押すと、DIV がフォーカスを失い (「focusout」イベントが発生する)、値がモデルに保存されるため、「元に戻す」ボタンでその値を元に戻すことができないことです。

(「元に戻す」をクリックします -> focusout イベント (自動保存) -> イベントをクリックします (??? can't revert) )

私が見る可能な回避策:

  1. ぼかしにタイムアウトを設定し、「元に戻す」ボタンが押された場合はキャンセルします。ただし、ユーザーが値を入力してアプリの他の部分に移動できるため、保存がタイムアウトすると $watch リスナーが実行されないため、見苦しくなります。
  2. focusin で値を保存し、「元に戻す」ボタンが保存されたときに復元します。これは別の問題を引き起こします: $watch リスナーは変更された値で実行され、その後、以前の値で再度実行されます (したがって、1 回ではなく 2 回の DB への書き込みが発生します)。

このような動作の解決策はありますか (ぼかし + 元に戻すボタンの自動保存)?

4

1 に答える 1

1

underscore.js デバウンス関数などを使用して、自動保存を遅らせ、元に戻すフラグをチェックしてキャンセルするのはどうですか? $watch リスナーが何をしているのかわかりません。もちろん、ユーザーがアプリを完全に終了したり、ページを更新したりしても機能しません。

于 2013-03-28T20:11:10.340 に答える