1

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

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

  1. 用户更改数据。布尔变量变为 TRUE。
  2. 用户按下 Ctrl+S。
  3. 调用一个函数,它检索当前数据并开始保存它。
  4. 用户在保存期间更改更多数据。
  5. 该函数完成保存并将变量设置为 FALSE。

即使第 4 步中存在一些未保存的数据,也很容易看到该标志被设置为 FALSE。文字处理器/文本编辑器如何处理这个问题?他们是否只是在保存过程中禁用输入,但它足够快以至于我看不到它?

4

1 回答 1

1

在浏览器中有一个revision字段。另外,有一个saved_revision领域。当文档保存开始时,您的代码会记住当前值revision,当保存完成时,它会上saved_revision升到该值。每次用户更改某些内容时,revision都会增加一。要检查是否所有更改都已保存,请检查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 回答