0

背景

我有一个(美化的)CRUD 应用程序,我想启用 HTML5 离线支持。缓存清单系统看起来简单但功能强大,但我很好奇如何允许用户在离线时访问数据。

例如,假设我有实体“案例”的这些页面(即这是 CRM 案例管理软件):

http://myapplication.com/Case
http://myapplication.com/Case/{id}
http://myapplication.com/Case/Create

第一个 URI 包含所有案例的分页列表,使用查询字符串参数pageIndexpageSize,例如/Case?pageIndex=2&pageSize=20

第二个 URI 是用于编辑个别案例的模板,例如/Case/1/Case/56

最后,/Case/Create是用于创建案例的表格。

问题

我希望这三个都可以离线使用。

/案子

简单的方法是添加/Case到缓存清单中,但这会破坏分页(因为链接不起作用)。

我想我可以改为添加类似/Case/AllDataXML 资源的内容,它是缓存的,如果脱机,则脚本/Case将使用此 XML 数据填充列表并提供分页。

如果我选择后者,我怎样才能将这些 XML 数据存储在浏览器内的 SQL 数据库中,而不是作为缓存资源?我认为使用 SQL 数据库会更有弹性。

/案例ID}

这更复杂。有手动添加/Case/1,等的简单解决方案/Case/2,但可能有数百甚至数千个案例,所以这不是很实用。/Case/3/Case/1234

例如,我认为该系统应该提供对 30 个最新案例的访问权限。如上所述,如何将这些数据存储在数据库中?

另外,这将如何工作?如果我没有明确添加/Case/34到清单中并且用户单击/Case/34我如何​​让浏览器加载我的 JavaScript 将根据浏览器的 SQL 数据库数据填充的页面而不显示脱机消息?

/案例/创建

这个更简单——因为它只是一个空页面,并且在<form>'submit操作时,我的脚本会检测它是否离线,如果它离线,它会将其添加到浏览器的 SQL 数据库中。这听起来好吗?

谢谢!

4

1 回答 1

0

我认为您需要查看 LocalStorage 数据库(尽管它确实有一些缺点),但还有其他替代方案,例如 WebSQL 和 IndexedDB。

另外,如果您允许人们创建,我认为您不应该使用数字 ID,因为您会遇到主键冲突,最好使用 GUID 之类的东西。

您需要的另一件事是将这些新案例推送到服务器上的能力。可能有多个...

它们可以编辑吗?如果可以的话,我认为你真的需要非常努力地考虑同步和冲突解决,如果是这样的话。

无耻的自我推销,我有一个旨在处理这些问题的项目,虽然它还没有完成,但它已经接近了。您可以在https://github.com/forbesmyester/SyncIt看到它(带有丑陋但非常实用的)演示

于 2013-06-03T22:32:43.197 回答