JSONStore 为我们提供了一种很好的方式来与服务器同步数据并跟踪用户在离线时所做的更改。但是,由于 JSONStore 数据仅在内存中,因此如果用户停止应用程序或重新启动设备,任何更改都会丢失。
看起来 Cordova 存储 API 可能是解决方案的一部分,但我没有看到一种明确的方法可以使用它来持久化和检索 JSONStore 数据。
JSONStore 为我们提供了一种很好的方式来与服务器同步数据并跟踪用户在离线时所做的更改。但是,由于 JSONStore 数据仅在内存中,因此如果用户停止应用程序或重新启动设备,任何更改都会丢失。
看起来 Cordova 存储 API 可能是解决方案的一部分,但我没有看到一种明确的方法可以使用它来持久化和检索 JSONStore 数据。
JSONStore 数据仅在内存中。
这是不正确的,除非您在谈论另一个 JSONStore。除非从设备上卸载应用程序或调用:destroy、remove、erase或removeCollection ,否则数据将被保留。查看入门模块(7.9、7.10、7.11 和 7.12)和IBM InfoCenter 文档以了解更多详细信息。
试试下面的代码片段:
var c = WL.JSONStore.initCollection('customers', {name: 'string'}, {onSuccess: function(){
c.add({name: 'helloworld'}, {onSuccess: function(){
c.findAll({onSuccess: function (res) {
console.log(JSON.stringify(res));
}})
}});
}});
为简洁起见,我省略了失败回调。每次运行应用程序时,它都会存储一个新的“helloworld”文档。您可以重新启动应用程序,数据仍然存在。您可以在此处阅读有关我使用的 API 方法的更多信息:initCollection、add、findAll。
也许有一种方法我们应该检查现有数据,这样我们就不会以某种方式删除它?
您可以调用count来查看 JSONStore 集合中有多少数据。
如果您想从后端获取数据,您需要创建一个 Worklight Adapter 并将其链接到您的集合,然后需要调用load。要将数据发送回您的后端,您可以调用push。这在Getting Started Modules中有更好的解释,特别是:Module 7.11 - JSONStore with Synchronization。
附带说明一下,请确保在ondeviceready
事件触发后调用 JSONStore。在函数内部进行 JSONStore 调用是安全的wlCommonInit
。确保您在 Android 或 iOS 平台(设备或模拟器/模拟器)上进行测试。它不适用于移动浏览器模拟器或任何 Web 浏览器。
JSONStore 作为文件保存在设备本地存储中。JSONStore 是持久的。
看看PhoneGap 存储。所有这些方法都应该通过 Cordova 库在 Worklight 中可用。