2016-09-30 60 views
1

我有一個現有的ExtJS應用程序,我從4.x升級到6.2.0。我做了一個簡單的存儲供應商制定者,我通過了我的Ext.onReady()塊,看起來像下面這樣:Ext.state.Manager.setProvider()行爲6.2與4.x

Ext.state.Manager.setProvider(Ext.create('Ext.state.LocalStorageProvider',{})); 

當我換到6.2.0,我得到的錯誤:

ext-all-rtl-debug.js:9389 [E] Ext.util.LocalStorage.constructor(): Cannot create duplicate instance of local store "ext". Use Ext.util.LocalStorage.get() to share instances. 

所以我不得不這樣做,我認爲是一個解決方法,就是以下幾點:

Ext.state.Manager.setProvider(Ext.util.LocalStorage.get('id'));

我這裏關注的是,雖然我只是應用繃帶的問題並沒有真正解決問題。我沒有明確地在其他地方設置提供程序,我所做的只是將ExtJS庫從4.x換到6.2.0以獲取該錯誤。這就像 - 如果它是在6.2.0初始化過程中的其他地方首先創建的,現在我得到如前所述的duplicate錯誤。

6.2.0中的變化導致了這種行爲?現在是否有兩個提供者設置,一個由ExtJS設置,另一個由我的客戶端代碼設置?有沒有更好的方法來處理這個問題?

+0

我會跟蹤它設置提供者的位置。在「Ext.util.LocalStorage.cache」中設置id的地方留一個斷點。 –

+0

你能舉例[在小提琴](https://fiddle.sencha.com/)? – madreason

+0

你是否嘗試過在初始化階段將setter(如文檔中所述)放置? (而不是當ext準備就緒時)http://docs.sencha.com/extjs/6.2.0/classic/Ext.state.Manager.html – devbnz

回答

2

此錯誤的前提條件在ExtJS 4和ExtJS 6中都是相同的。相應的文件沒有更改:比較ExtJS 4.2.4 versionExtJS 6.2.0 version

因此,您的應用程序必須對此負責。您的(升級)代碼中的某處必須創建Ext.util.LocalStorage的實例。由於這個錯誤是在ID已經註冊並且註冊只在Ext.util.LocalStorage類的構造函數中完成的情況下拋出的,我建議在那裏設置一個斷點來檢查堆棧跟蹤哪個函數調用構造函數方法。