1

TODO リスト Web アプリを作成していますが、リストの内容を保存する方法について質問があります。ワープロと同じように、ユーザーが保存中にデータを変更できるようにしたいと考えています。

ブール変数を使用して、ユーザーによって何かが変更されたことを示すことができます。何かが変更された場合は TRUE、それ以外の場合は FALSE。おそらく、このフラグは、一部のデータが保存されていないことをユーザーに示すためにも使用されます。ユーザーが Ctrl+S を押してデータを保存すると、アプリが関数を呼び出し、リスト内の現在のデータが取得され、データベースへの保存が開始されます。最後に、変数は false に変更されます。これは単純に思えますが、このアプローチには明らかな落とし穴があります。例えば。

  1. ユーザーがデータを変更します。ブール変数は TRUE になります。
  2. ユーザーが Ctrl+S を押します。
  3. 関数が呼び出され、現在のデータを取得して保存を開始します。
  4. ユーザーは、保存中にさらにデータを変更します。
  5. 関数は保存を終了し、変数を FALSE に設定します。

手順 4 で保存されていないデータがある場合でも、結果としてフラグが FALSE に設定されていることは簡単にわかります。ワード プロセッサ/テキスト エディタはこれをどのように処理しますか? 保存中に入力を無効にするだけですが、表示されないほど速いですか??

4

1 に答える 1

1

ブラウザにrevisionフィールドを用意します。また、saved_revisionフィールドを持ってください。ドキュメントの保存が開始されると、コードは現在の値を記憶し、revision保存が完了すると、saved_revisionその値まで上昇します。ユーザーが何かを変更するたびに、revision1 ずつ増加します。すべての変更が保存されているかどうかを確認するには、revision == saved_revision. このようなもの:

var revision = 0
var saved_revision = 0

function handle_keypress() {
  revision++
  update_document_saved_display()
  /* ... */
}

function save() {
  var saving_rev = revision
  upload_version(serializeDocument(), function(status) {
    if (status === 'ok') {
      saved_revision = saving_rev
      update_document_saved_display()
    }
  })
}
于 2013-04-02T09:17:41.033 に答える