我正在创建一个TODO列表Web应用程序,我有一个关于如何保存列表内容的问题。就像任何文字处理器一样,我希望允许用户在保存期间修改数据。
我可以使用布尔变量来表示某些内容已被用户更改,即。当某些内容发生变化时为TRUE,否则为FALSE。也许,此标志还用于向用户显示某些数据未保存。当用户通过按Ctrl + S保存数据时,我的应用程序调用一个函数,然后获取列表中的当前数据并开始将其保存到数据库。最后,变量更改为false。这似乎很简单,但这种方法存在明显的缺陷。例如。
即使步骤4中有一些未保存的数据,也很容易看到该标志设置为FALSE。文字处理器/文本编辑器如何处理这个问题?他们只是在保存期间禁用输入,但它足够快,我看不到它?
答案 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()
}
})
}