【问题标题】:WL.JSONStore.push does nothingWL.JSONStore.push 什么都不做
【发布时间】:2014-09-10 19:53:09
【问题描述】:

我正在使用 Worklight 6.2 构建一个使用 JSONStore 和 SQL 适配器的简单数据同步示例。 一切似乎都按我想要的方式工作,除了“推”回适配器。我的应用程序通过“load()”提取数据。我允许用户选择一个项目,更改它,然后在集合中“替换()”。但是,当我调用“push()”时,什么也没有发生。没有错误-nada。我希望这是一个简单的“拼写错误”问题,但我现在被难住了。

任何意见将不胜感激!

-鲍勃-

有效的方法:

WL.JSONStore.init(),
WL.JSONStore.load(),
WL.JSONStore.findAll(),
WL.JSONStore.find(),
WL.JSONStore.replace(),
WL.JSONStore.pushRequiredCount()

不工作的是最后也是最重要的:

WL.JSONStore.push();

这是我的同步代码:

function syncWithServer(){
// THIS FIRST PART WORKS - YAY!!!!!
console.log ("Check for dirty records");
WL.JSONStore.get(employeeCollectionName).pushRequiredCount()
.then(function (numberOfDirtyDocuments) {
    alert("DIRTY: " + numberOfDirtyDocuments);
 })

.fail(function (errorObject) {
    alert (errorObject);
});

 / NOTHING HAPPENS AFTER THE LOG  - JUST FALLS THRU TO THE LAST CONSOLE LOG
// NO ERRORS OR ANYTHING

console.log("Atempting to update server");

WL.JSONStore.get(employeeCollectionName).push()
 .then ( function (res) {
    alert("Server updated successfully");
})
 .fail ( function (errorObject){
    alert (errorObject);
});
console.log("HUmmmmmm .....");
}

【问题讨论】:

  • 执行 pushRequiredCount 时是否得到 0 个脏文档?推送回调中的 res 变量是空的,还是数组已满?您能否将 WL.JSONStore.init 包含在您配置要用于推送的适配器的选项对象中?您要推送到的适配器中的代码是什么?所有这些都将有助于调试您的代码。您是在 Android、iOS、Windows 中测试此代码,还是在预览时仅在浏览器中测试?您可以在日志中看到与适配器的连接吗?您可以从您正在测试的设备访问服务器的控制台吗?
  • @Daniel - 为长时间的延迟道歉。不幸的是,我上周不得不出差,不得不搁置这个。在我发送代码之前,我认为我需要只用最少的元素来重建我的项目——尽量减少出错的可能性。同时,我注意到 WL 6.1 和 WL 6.2 示例不使用 jQuery Mobile。我想知道是否有人对兼容性问题有任何想法。我正在使用 JQM 1.4.0。
  • JQM 应该没有问题,但如果你把它拿出来,它可能会使调试更容易。尝试获取我要求的信息,以便我们可以缩小问题的范围。
  • @Daniel - 我得到了 1 个如预期的脏文档,我从来没有收到回调,我正在使用 FireFox 和 Chrome 在 MAC 上进行测试,适配器现在被拔掉了,我看到了 getEmployees,但不是 updateEmployee。我已将文件添加(我希望)到 github(新手)帐户以供您查看 - 请善待! :-) github.com/btierney/SampleJSONStore
  • 抱歉,回复延迟,请看下面我的回答,它应该适合你。

标签: ibm-mobilefirst adapter sync jsonstore


【解决方案1】:

您的应用程序似乎在做正确的事情,所以这可能是一个缺陷。但是,push() 和 load() API 自 6.2 起已弃用,我认为如果您遵循新方法,它将对您有用。

新的做法是直接调用适配器;这就是 JSONStore 在调用 push() 或 load() 时所做的一切,同时限制了可以发送给它的参数,因此直接调用适配器更有意义。对于推送,您可以像这样编辑推送调用:

WL.JSONStore.get(employeeCollectionName).getAllDirty()

.then(function (dirtyDocs) {

  return WL.Client.invokeProcedure({
    adapter : 'people',
    procedure : 'updatePeople',
    parameters : [ dirtyDocs ]
  });
})

.then(function (responseFromAdapter) {
  // ... call markClean API after a valid response form the adapter
});

确保将参数和过程以及适配器名称更改为您的适配器。

此外,此答案是对 working with external data 文档中内容的简短总结,包括有关如何进行推拉(加载)的示例。

也就是说,即使 push() 和 load() 已被弃用,它们仍然应该可以工作,因此创建了一个缺陷来进一步研究。

【讨论】:

    【解决方案2】:

    我从您的 GitHub 帐户运行了您的测试应用程序,并且能够使用 HTTP 适配器正常运行它并且回调正确返回。您在使用 SQL 适配器时收到了哪些日志(如果有)。

    [EDIT ~ 8/6] 我创建了一个 SQL 适配器,并且能够从适配器中推拉。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2016-12-24
      • 2017-04-18
      • 2011-08-03
      • 2014-05-11
      • 1970-01-01
      • 2023-03-29
      • 2013-09-28
      • 2012-05-09
      相关资源
      最近更新 更多