我想在 ExtJS 应用程序中同时拥有不同商店的同一视图的不同实例。目前,我在视口中创建了同一视图(Ext.view.View)的多个实例。
但是在每个视图中都有不同的商店的最佳实践是什么?我发现的每个示例都在使用控制器的stores-Config 创建的视图中使用Store-ID。但这将为每个视图使用相同的存储。
目前我想到了以下可能的解决方案:
- 为每个视图实例创建一个自己的存储类。将所有商店添加到控制器,并为每个视图实例使用不同的商店 ID。
- 根本不要使用控制器的存储,并在视图的 initComponent 中创建一个新存储,手动将不同的参数传递给存储的每个实例。
- 根本不要使用控制器的存储,并在视图的 initComponent 中手动创建一个新存储。然后使用 load 为每个存储实例使用不同的参数来手动加载存储。
这些解决方案是否是最佳实践,还是应该采取不同的做法?
控制器的存储数组的东西是,它将覆盖任何storeId
定义的。加载商店类后,控制器设置storeId
通过命名空间约定,创建存储并使用值作为 getter 方法来创建 getter 方法soreId
.
让我介绍一下选项4
- 为视图定义一个存储并在视图中引用它(您也可以在控制器中引用它,只需使用
requires
大批)。
- 选择有效itemId http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.Component-cfg-itemId的观点和有效storeId http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.data.Store-cfg-storeId您的商店应该取决于
itemId
视图的(在创建视图时设置它!)。
- 内
initComponent
创建storeId
并在 StoreManager 中查找商店。如果不存在,请创建它并提供客户配置和storeId
.
如果您每次都需要销毁视图和商店,请看一下这个帖子 https://stackoverflow.com/questions/27368951/are-stores-created-in-the-initcomponent-function-memory-leaks-once-the-component/27374842#27374842
演示初始化组件
initComponent: function() {
var me = this,
storeId = me.storeId + me.itemId;
me.store = Ext.StoreManager.lookup(storeId);
if(me.store === null)
me.store = Ext.create('App.data.CustomViewStore',Ext.apply({storeId: storeId},me.storeCfg || {}));
me.callParent(arguments);
}
Note:如果您使用以下命令加载视图views
数组,你最终会得到一个 getter,它可能不会给你你期望的视图。您也可以在这里使用控制器的 require 数组。如果您想使用 getter,只需使用以下命令创建您自己的 getterrefs http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.app.Controller-cfg-refs config.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)