【问题标题】:IBM Worklight - JSONStore logic to refresh data from the server and be able to work offlineIBM Worklight - JSONStore 逻辑,用于从服务器刷新数据并能够脱机工作
【发布时间】:2013-09-09 12:17:15
【问题描述】:

目前 JSONStore API 提供了一个 load() 方法,文档中说:

此函数始终存储从适配器返回的任何内容。如果 数据存在,它在集合中重复”。这意味着 如果你想通过调用 load() 来避免重复 填充集合,您需要先清空或删除集合。 但是,如果您希望能够保留已有的元素 如果没有更多的连接并且您的 应用程序进入离线模式,您还需要跟踪 这些现有元素。

由于 API 不提供“覆盖”选项以在对适配器的调用成功时替换现有元素,我想知道应该使用哪种逻辑来管理离线可用性数据和随时刷新的能力?由于 promises 的原因,通过嵌套 JS 代码来管理所有的失败案例并不是那么明显......

感谢您的建议!

【问题讨论】:

    标签: ibm-mobilefirst jsonstore worklight-adapters


    【解决方案1】:

    实现此目的的一种方法:

    • 使用enhance 创建您自己的加载方法(即loadAndOverwrite)。您应该可以访问保存在 JSONStore 实例中的所有变量(集合名称、适配器名称、适配器加载过程名称等——您可能会在下面的 invokeProcedure 步骤中使用这些变量)。

    • 致电push 以确保没有本地更改。

    • 调用invokeProcedure获取数据,你需要的所有变量都应该在增强的上下文中提供。

    • 查找文档是否已经存在,然后remove它。使用 {push: false} 这样 JSONStore 就不会跟踪该更改。

    • 使用add 添加新的/更新的文档。使用 {push: false} 这样 JSONStore 就不会跟踪该更改。

    • 或者,如果文档存在,您可以使用replace 对其进行更新。

    • 或者,您可以使用removeCollection 并再次调用load 来刷新数据。

    有一个示例说明了如何使用所有这些 API 调用 here

    关于承诺,请阅读 InfoCenter 中的 this 和 HTML5Rocks 中的 this。 Google 可以提供更多信息。

    【讨论】:

    • 我感觉我正在尝试做的是一种很常见的模式,我发现它需要大量的逻辑来管理它。我希望将来 API 会发展到非常简单地管理这个。
    • 未来 JSONStore 的工作在很大程度上取决于客户的需求,一个很好的沟通方式是feature request
    猜你喜欢
    • 2013-04-27
    • 2013-08-13
    • 2014-08-07
    • 2014-08-10
    • 1970-01-01
    • 2014-08-01
    • 2015-06-07
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多