在ExtJS 4中多次拥有相同视图和存储的最佳实践

Wer*_*001 5 parameters extjs store

我想在ExtJS应用程序中同时具有不同存储的相同视图的不同实例.目前,我在视口中停止了同一视图的多个实例(Ext.view.View).

但是,在每个视图中拥有不同商店的最佳做法是什么?我找到的每个示例都在使用控制器的stores-Config创建的视图中使用Store-ID.但是这会为每个视图使用相同的商店.

目前我想出了以下可能的解决方案:

  1. 为每个视图实例创建自己的商店类.将所有商店添加到控制器,并为每个视图实例使用不同的Store-ID.
  2. 根本不要使用控制器存储,并在视图的initComponent中创建一个新存储,手动将不同的参数传递给存储的每个实例.
  3. 根本不要使用控制器存储,并手动在视图的initComponent中创建新存储.然后使用load手动为每个商店实例使用不同的参数加载商店.

这些解决方案中的任何一种都是最佳实践,还是应该以不同方式完成

sra*_*sra 3

控制器的存储数组的问题 是,它将覆盖任何storeId已定义的数组。加载 store 类后,控制器storeId通过命名空间约定设置,创建 store 并使用该值作为 .getter 方法来创建 getter 方法soreId

让我介绍一下选项4

  • 为视图定义一个存储并在视图中引用它(您也可以在控制器中引用它,只需使用数组requires)。
  • 为视图选择有效的itemId,为商店选择有效的storeIditemId ,这应该取决于视图(创建视图时设置!)。
  • 在 StoreManager 中创建并查找商店initComponentstoreId如果不存在,请创建它并提供客户配置和storeId.

如果您每次都需要销毁视图和商店,请查看这篇文章

演示初始化组件

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);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果你用数组加载视图,views你最终会得到一个 getter,它可能不会给你你期望的视图。您也可以在这里使用控制器的 require 数组。如果您想使用 getter,只需使用refs配置创建您自己的 getter。