重用或创建新的 Store - ExtJS 4

Posted

技术标签:

【中文标题】重用或创建新的 Store - ExtJS 4【英文标题】:Reusing or creating new Store - ExtJS 4 【发布时间】:2014-06-26 12:53:42 【问题描述】:

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

getOrCreateStore: function(storeId, className)
    return (Ext.getStore(storeId) == undefined) ? Ext.create(className) : Ext.getStore(storeId);
,

因此,每次组件需要特定存储时,如果已创建,我会调用它,如果不存在则创建它。

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

我使用上述修复的原因是,如果未实际创建商店,则网格将保持为空。

【问题讨论】:

【参考方案1】:

见http://docs-origin.sencha.com/extjs/4.2.2/#!/api/Ext.data.StoreManager

在创建商店时,您没有为商店提供storeId。 您的三元也可以压缩成|| 操作。

代码

getOrCreateStore: function(storeId, className)
    return Ext.getStore(storeId) || Ext.create(className, storeId: storeId);

旁注: 我认为大多数 Ext 的经理都是不好的做法。它们只不过是美化的全局变量。我更喜欢绕过需要它们的商店,而不是诉诸将它们添加到全局状态。但是,我确实知道这在某些情况下会使编程变得更容易,并且如果您想要这种延迟加载商店(我不确定这是否真的会让您受益匪浅),这就是要走的路。我只是警告您,这往往会使维护和单元测试变得更加困难。

【讨论】:

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

以上是关于重用或创建新的 Store - ExtJS 4的主要内容,如果未能解决你的问题,请参考以下文章

创建类、结构或新的 swift 文件以创建具有特定样式的可重用文本框?

在 Sencha Touch 中重用 ExtJS 的模型和存储

有没有办法刷新或重用 SoftAssert

Angular 最佳实践:为了可重用性,创建新的 CSS 类或新组件?

如何在不创建新的小部件树分支的情况下重用相同的布局屏幕

是否可以在 appWidget 中重用 RemoteViews 而不是每次都创建新的?我该如何存储它们?