Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重用或创建新的存储-ExtJS 4_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

重用或创建新的存储-ExtJS 4

重用或创建新的存储-ExtJS 4,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我的应用程序中有几个商店。在我加载网格之前不会创建它们,网格应该调用store.load()函数。因此,某些组件可能需要尚未创建的存储。我正在使用此函数修复此问题: getOrCreateStore: function(storeId, className){ return (Ext.getStore(storeId) == undefined) ? Ext.create(className) : Ext.getStore(storeId); }, 所以,每当组件需要特定的存储时,我会

我的应用程序中有几个商店。在我加载网格之前不会创建它们,网格应该调用store.load()函数。因此,某些组件可能需要尚未创建的存储。我正在使用此函数修复此问题:

getOrCreateStore: function(storeId, className){
    return (Ext.getStore(storeId) == undefined) ? Ext.create(className) : Ext.getStore(storeId);
},
所以,每当组件需要特定的存储时,我会在创建时调用它,或者在不存在时创建它

有没有更好的方法创建商店,这样我就不必手动创建了?在我的ExtJS4应用程序中是否有一些关于创建商店的配置我没有设置

我之所以使用上述修复方法,是因为如果不是首先创建存储,网格将保持为空

  • 创建存储时,您没有给它一个
    storeId
  • 您的三元组也可以压缩为
    |
    操作
代码

getOrCreateStore: function(storeId, className){
    return Ext.getStore(storeId) || Ext.create(className, {storeId: storeId});
}
旁注
我认为大多数EXT的管理者都是不良行为。它们不过是美化了的全局变量。我更喜欢在需要它们的商店转转,而不是求助于将它们添加到全局状态。然而,我确实明白,在某些情况下,这会使编程变得更容易,如果您希望延迟加载存储(我不确定这是否真的会对您有多大好处),这是一种方法。我只是警告您,这会使维护和单元测试更加困难。

好的。那么,我应该在什么时候创建我的存储,这样以后就不会有问题了?在launch function?@Vlad中,不幸的是,如果没有对代码的透彻理解以及如何编写单元测试,很难解释这一点。众所周知,全局变量使测试更加困难,并导致组件和环境之间的紧密耦合,从而使单元测试更加困难。我建议您尝试编写一个单元测试,并确保可以单独测试组件。我只是想提醒你,经理只不过是商店的全局容器,你应该像对待你创建的任何其他全局变量一样小心。实际上没有问题。问题是,网格一直是空的,因为没有创建存储。使用类似这样的行,store:'store.path.name'也没有加载数据。@Vlad我不知道你的意思,问题是你从来没有用
storeId
创建过一个存储。现在它应该正在创建它,网格确实有一个存储(因此它显示数据)。我进行了一些测试,得到了一个两个网格使用同一个存储的案例。应用程序启动时显示的一个选项使用store:“storepath”选项正确显示数据。第二个网格显示在窗口中(单击按钮后显示),仅当数据加载到第一个网格中时才会显示数据。我对此感到困惑。这就是为什么我不知道我在说什么。我也在学习ExtJS4,所以对我来说还是有雾。