如果允许用户在保存期间修改内容,如何捕获要保存的内容?

时间:2013-04-02 09:13:18

标签: web-applications save autosave

我正在创建一个TODO列表Web应用程序,我有一个关于如何保存列表内容的问题。就像任何文字处理器一样,我希望允许用户在保存期间修改数据。

我可以使用布尔变量来表示某些内容已被用户更改,即。当某些内容发生变化时为TRUE,否则为FALSE。也许,此标志还用于向用户显示某些数据未保存。当用户通过按Ctrl + S保存数据时,我的应用程序调用一个函数,然后获取列表中的当前数据并开始将其保存到数据库。最后,变量更改为false。这似乎很简单,但这种方法存在明显的缺陷。例如。

  1. 用户更改数据。布尔变量变为TRUE。
  2. 用户按Ctrl + S.
  3. 调用一个函数,它会检索当前数据并开始保存它。
  4. 用户在保存期间更改了更多数据。
  5. 该函数完成保存并将变量设置为FALSE。
  6. 即使步骤4中有一些未保存的数据,也很容易看到该标志设置为FALSE。文字处理器/文本编辑器如何处理这个问题?他们只是在保存期间禁用输入,但它足够快,我看不到它?

1 个答案:

答案 0 :(得分:1)

在浏览器中有一个revision字段。此外,还有一个saved_revision字段。文档保存开始后,您的代码会记住当前revision,当保存完成后,它会将saved_revision提升到该值。每次用户更改内容时,revision都会递增1。要检查是否已保存所有更改,请检查是否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()
    }
  })
}