Worklight JSONStore - 生命周期

时间:2014-03-25 15:44:15

标签: ibm-mobilefirst jsonstore

环境:Windows上的Worklight Studio 6.1。我想确认我们对使用JSONStore.init()方法的理解。这是从this question开始的,它确定在调用init()重新打开商店时,我们必须传递与第一次初始化商店时完全相同的参数。

现在的问题是我们应该调用init(),以及我们是否会因意外多次调用init()而导致任何问题。这似乎是显而易见的,但我们正在尝试诊断一些错误情况,一个可能的原因是我们可能经常调用init()。

我的期望是,在使用JSONstore集合的应用程序的任何给定执行中必须为每个集合调用init()(可能通过使用集合列表调用init())并且合理的模型是在应用程序启动时这样做。这是基于我阅读文档JSONstore.init

我们可以确认从那时起我们可以:

A)。

自由地使用JSONStore.get()之类的方法,而不需要进一步的init()调用。

B)。如果我们再次为已初始化的集合调用init(),则应该没有副作用。

我们似乎遇到的症状是,有时第二次调用init()会导致错误消息

 PROVISION_TABLE_SEARCH_FIELDS_MISMATCH  in worklight.js at line 4556

虽然我们可以看到我们总是使用缩进的集合参数调用init()。

1 个答案:

答案 0 :(得分:4)

如果您是第一次打开集合,或者在关闭商店后重新打开集合,则只需要调用init。如果您已完成使用JSONStore并希望为安全目的关闭它,或者如果您要使用多个用户时想要切换到另一个JSONStore用户,则只需要关闭存储。如果您不需要这两种情况,则无需关闭商店。

您绝对可以在启动时初始化集合,并在应用程序生命周期的剩余时间内打开它们,然后在应用程序关闭时关闭它,例如。调用get或任何其他JSONStore方法时,不必调用init;你只需要调用init,就像我说的那样,当你第一次使用该集合时,或者在你关闭或销毁商店之后(通过调用WL.JSONStore.closeAll()或WL.JSONStore.destroy())。

至于你得到的错误,很可能意味着你第二次调用init时传递不同的字段,而你不能这样做,因为搜索字段不能动态更改。如果要更改搜索字段,首先必须删除该集合(并丢失其中的数据),然后使用新数据重新初始化它。

要验证您可以多次调用init(使用相同的参数),可以运行以下示例代码:

var collections = {
          people : {
            searchFields : {name: 'string'}
          },
          orders : {
            searchFields: {name: 'string'}
          }
        };

        WL.JSONStore.init(collections)

        .then(function () {
          return WL.JSONStore.init(collections);
        })

        .then(function () {
          return WL.JSONStore.init(collections);
        })

        .then(function () {
          //init called 3 times succesfully
            alert('Multiple inits worked');
        })

        .fail(function (err) {
          //this should not be called
            alert('Multiple inits failed' + err.toString());
        });