【问题标题】:Reusing or creating new Store - ExtJS 4重用或创建新的 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 应用程序中设置的关于创建商店的配置?

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

【问题讨论】:

    标签: extjs extjs4 extjs4.2


    【解决方案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,所以它对我来说仍然很模糊。
    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2013-09-04
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多