【问题标题】:Best practice to have the same view and store multiple times in ExtJS 4在 ExtJS 4 中多次使用相同视图和存储的最佳实践
【发布时间】:2015-02-04 16:18:42
【问题描述】:

我想在 ExtJS 应用程序中同时拥有具有不同商店的同一视图的不同实例。目前我在视口中创建了同一视图(Ext.view.View)的多个实例。

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

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

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

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

【问题讨论】:

  • 不加评论的投反对票太没用了……
  • 这是一个公平的问题,我不明白为什么这被否决了。
  • 谢谢。顺便说一句,我决定暂时使用解决方案 3,直到发布更好的解决方案。
  • 我能想到的问题之一是销毁相关组件时销毁这些存储的额外代码。我的意思是,如果您在 initComponent 函数中创建商店,那么当您销毁关联的网格时,该商店可能会继续存在......
  • 垃圾收集器不应该处理这个吗?如果我销毁包含对商店的引用的视图,那么商店将不再被引用吗?我认为拥有多个视图和存储类只是为了拥有具有不同存储参数的多个视图,这将是太多的开销,不是吗?

标签: extjs parameters store


【解决方案1】:

控制器的stores数组的东西 也就是说,它将覆盖任何定义的storeId。加载 store 类后,控制器通过命名空间约定设置 storeId,创建 store 并使用 soreId 的值创建 getter 方法方法。

让我介绍选项 4

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

如果您每次都需要销毁视图和存储,请查看this post

演示初始化组件

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);
}

注意:如果您使用 views 数组加载视图,您最终会得到一个可能无法为您提供预期视图的 getter。您也可以在这里使用控制器的 requires 数组。如果您想使用 getter,只需使用 refs 配置创建您自己的。

【讨论】:

  • 感谢您的回复,但我看不到选项 2 的“大”差异。仅仅是 storeId 和 Ext.StoreManager 还是我遗漏了什么?
  • @Werzi2001 不,差别不大。但这是有意义的区别!问题是您仍然可以在自己的位置定义您的商店,并且不要用它污染您的视图initComponent 方法。
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多