2014-03-25 32 views
1

環境:Windows上的Worklight Studio 6.1。我想確認我們對使用JSONStore.init()方法的理解。從this question開始,這表明在調用init()重新打開存儲時,我們必須傳遞與初次啓動存儲時完全相同的參數。Worklight JSONStore - 生命週期

現在的問題恰恰是我們應該調用init(),並且我們是否可以通過多次意外地調用init()導致任何問題。這看起來很明顯,但我們試圖診斷一些錯誤條件,一個可能的原因是我們可能經常調用init()。

我的期望是,要求是在使用JSONstore集合的應用程序的任何給定執行中,必須爲每個集合調用init()(可能通過調用具有集合列表的init()),並且合理的模型是在應用程序啓動時要做到這一點。這是基於我閱讀文檔JSONstore.init

請確認我們從那時起可以:

a)。不需要進一步的init()調用就可以自由使用JSONStore.get()等方法。 b)。我們是否應該再次爲已經初始化的集合調用init(),而不應該有副作用。

我們似乎有症狀是,有時第二個電話來使用,張玉峯採集參數的init()導致錯誤消息

PROVISION_TABLE_SEARCH_FIELDS_MISMATCH in worklight.js at line 4556 

雖然到目前爲止,我們可以看到我們隨時調用的init()。

+0

附加信息:作爲一個Android運行時,看起來,這些API像預期的那樣應用程序,但不作爲移動網絡應用程序運行時。如果我們能夠隔離測試用例,將會提出一個新問題。 – djna

回答

4

如果您是第一次打開集合或在關閉商店後重新打開集合,則只需調用init。如果您已完成使用JSONStore並希望爲了安全目的關閉它,或者如果要在使用多個用戶時切換到另一個JSONStore用戶,則只需要關閉該商店。如果您不需要這兩種情況,則不必關閉商店。

您可以在啓動時明確地初始化集合,並讓它們在應用程序生命週期的其餘部分打開,然後在應用程序關閉時關閉它。當您調用get或任何其他JSONStore方法時,您不必調用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()); 
     });