【问题标题】:Singletons Ext JS (4.2.1) and Stores单例 Ext JS (4.2.1) 和商店
【发布时间】:2013-12-22 04:49:57
【问题描述】:

如何将 Store 实现为单例?

在 Architect 中,我的商店有一个属性复选框,用于添加属性

singleton: true,

如果我添加它然后重新加载它无法加载的应用程序(如果需要有关错误的信息,我可以提供更多详细信息)

Uncaught TypeError: object is not a function VM5238:3
(anonymous function) VM5238:3
Ext.ClassManager.instantiate ext-all-debug.js:5485
(anonymous function) ext-all-debug.js:2109
Ext.define.getStore

如果我随后删除该属性,它加载正常,但在我使用 Ext.getStore("MyStore") 的地方,则返回的商店包含不同的数据,具体取决于我使用商店的位置。我有一个控制器,我在 getStore 方法中使用类名,这用于该控制器内的几个函数中。

此外,文档中似乎没有任何关于单例属性的文档。如果我查看 Ext.data.Store 没有单例。

【问题讨论】:

    标签: extjs extjs-stores


    【解决方案1】:

    我建议您使用 ExtJS 方式来处理存储和存储实例...

    storeIdExt.StoreManager 一起使用。请注意,每个storeId 都必须是唯一的,一旦您创建了一个商店实例,它就会将自己注册到Ext.StoreManager 及其storeId。您可以通过在Ext.StoreManager 上拨打lookup('storeId') 来获得商店。是的,您可以在代码中的任何位置执行此操作。

    例如,所有 Ext.ComponentsExt.util.Binable 的混合(它们是大多数(所有)绑定存储的本机组件)都可以使用分配给 store cfg 属性的 storeId 字符串。 Binable mixin 将在内部从 StoreManager 中查找它。如果你需要自己做

    //...
    store: Ext.StoreMgr.lookup('storeId') || Ext.create('YourStoreClassname')
    //...
    

    【讨论】:

    • 听起来不错。首先创建商店的最佳方式是什么。我正在阅读(在 sencha 网站上)最好留下 id 来生成并使用 itemId 代替。当我使用 Ext.getStore 时,它​​正在为我生成商店。
    • @delp 如果你使用 ExtJS MVC,你什么都不用做。疮将由控制器加载和实例化,storeId 将是商店类的标识名称。 AFAIK 'App.store.StoreName' 应该是 'StoreName' 而 'App.store.sub.StoreName' 应该是 'sub.StoreName'。如果您不使用 MVC,请按照我的示例进行操作
    • 是的,你是对的。它确实(如果使用控制器)会自动创建商店,并且当它这样做时,它会忽略您为其设置的 storeId 并使 storeId 与类名相同。谢谢。
    猜你喜欢
    • 2014-02-03
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2012-12-02
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多