【问题标题】:Persisting JSONStore data in local storage across application restarts?跨应用程序重新启动在本地存储中保留 JSONStore 数据?
【发布时间】:2013-02-11 21:09:52
【问题描述】:

JSONStore 为我们提供了一种很好的方式来与服务器同步数据并跟踪用户在离线时所做的更改。但是,由于 JSONStore 数据仅在内存中,因此如果用户停止应用程序或重新启动设备,任何更改都会丢失。

看起来 Cordova 存储 API 可能是解决方案的一部分,但我没有看到一种明确的方法可以使用它来持久化和检索 JSONStore 数据。

【问题讨论】:

    标签: cordova ibm-mobilefirst jsonstore


    【解决方案1】:

    JSONStore 数据只在内存中。

    这是不正确的,除非您在谈论另一个 JSONStore。除非从设备上卸载应用程序或调用:destroyremoveeraseremoveCollection,否则数据将被保留。查看Getting Started Modules(7.9、7.10、7.11 和 7.12)和IBM InfoCenter documentation 了解更多详情。

    试试下面的代码sn-p:

    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 方法的更多信息:initCollectionaddfindAll

    也许有一种方法我们应该检查现有数据,这样我们就不会 以某种方式删除它?

    您可以致电count 来查看 JSONStore 集合中有多少数据。

    如果您想从后端获取数据,您需要创建一个 Worklight 适配器并将其链接到您的集合,然后需要调用 load。要将数据发送回您的后端,您可以致电push。这在Getting Started Modules 中有更好的解释,特别是:Module 7.11 - JSONStore with Synchronization

    附带说明,请确保在 ondeviceready 事件触发后调用 JSONStore。在 wlCommonInit 函数中调用 JSONStore 是安全的。确保您在 Android 或 iOS 平台(设备或模拟器/模拟器)上进行测试。它不适用于移动浏览器模拟器或任何 Web 浏览器。

    【讨论】:

      【解决方案2】:

      JSONStore 作为文件保存在设备本地存储中。 JSONStore 是持久的。

      【讨论】:

      • 这是否记录在某处?我们构建了一个演示应用程序,它可以离线工作,然后在重新连接时将数据编辑同步回服务器。但是,应用程序重新启动会杀死数据。也许有一种方法我们应该检查现有数据,这样我们就不会以某种方式删除它?谢谢!
      • @Handly:请参阅my answer 了解检查现有数据的方法。
      【解决方案3】:

      看看PhoneGap Storage。所有这些方法都应该通过 Cordova 库在 Worklight 中可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 2010-11-19
        相关资源
        最近更新 更多