Ibm mobilefirst Worklight JSONStore-生命周期

Ibm mobilefirst Worklight JSONStore-生命周期,ibm-mobilefirst,jsonstore,Ibm Mobilefirst,Jsonstore,环境:Windows上的Worklight Studio 6.1。我想确认我们对使用JSONStore.init()方法的理解。这是从以下内容开始的:当调用init()重新打开存储时,我们必须传递与第一次初始化存储时完全相同的参数 现在的问题是,我们应该在什么时候调用init(),以及多次意外调用init()是否会导致任何问题。这似乎很明显,但我们正在尝试诊断一些错误情况,一个可能的原因是我们可能太频繁地调用init() 我的期望是,在使用JSONstore集合的应用程序的任何给定执行中,必须为

环境:Windows上的Worklight Studio 6.1。我想确认我们对使用JSONStore.init()方法的理解。这是从以下内容开始的:当调用init()重新打开存储时,我们必须传递与第一次初始化存储时完全相同的参数

现在的问题是,我们应该在什么时候调用init(),以及多次意外调用init()是否会导致任何问题。这似乎很明显,但我们正在尝试诊断一些错误情况,一个可能的原因是我们可能太频繁地调用init()

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

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

a) 。自由使用JSONStore.get()等方法,无需进一步调用init()

b) 。如果我们为已经初始化的集合再次调用init(),应该不会有任何副作用

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

 PROVISION_TABLE_SEARCH_FIELDS_MISMATCH  in worklight.js at line 4556

尽管就我们所见,我们总是使用缩进集合参数调用init()。

如果您是第一次打开集合,或者在关闭存储后重新打开集合,则只需调用init即可。只有在使用完JSONStore并出于安全目的而关闭它时,或者在使用多个用户时,如果要切换到另一个JSONStore用户,才需要关闭存储。如果您不需要这两种情况,则不必关闭商店

例如,您可以在启动时初始化集合,并在应用程序生命周期的剩余时间内将其打开,然后在应用程序关闭时将其关闭。在调用get或任何其他JSONStore方法时,不必调用init;正如我所说,当您第一次使用集合时,或者在关闭或销毁存储之后(通过调用WL.JSONStore.closeAll()或WL.JSONStore.destroy()),只需调用init即可

至于您得到的错误,这很可能意味着您在第二次调用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());
        }); 

只有在第一次打开集合或在关闭存储后重新打开集合时,才需要调用init。只有在使用完JSONStore并出于安全目的而关闭它时,或者在使用多个用户时,如果要切换到另一个JSONStore用户,才需要关闭存储。如果您不需要这两种情况,则不必关闭商店

例如,您可以在启动时初始化集合,并在应用程序生命周期的剩余时间内将其打开,然后在应用程序关闭时将其关闭。在调用get或任何其他JSONStore方法时,不必调用init;正如我所说,当您第一次使用集合时,或者在关闭或销毁存储之后(通过调用WL.JSONStore.closeAll()或WL.JSONStore.destroy()),只需调用init即可

至于您得到的错误,这很可能意味着您在第二次调用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());
        }); 

附加信息:当作为Android应用程序运行时,API的行为似乎与预期一致,但当作为移动web应用程序运行时,API的行为却与预期不同。如果我们能够分离出一个测试用例,这将引发一个新问题。其他信息:当作为Android应用程序运行时,API的行为似乎与预期一致,但当作为移动web应用程序运行时,API的行为却与预期不同。如果我们能分离出一个测试用例,就会产生一个新问题。