2016-09-30 28 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类的构造函数中完成的情况下抛出的,我建议在那里设置一个断点来检查堆栈跟踪哪个函数调用构造函数方法。