Javascript ExtJS:检查组件是否是Ext.TabPanel的直接后代

Javascript ExtJS:检查组件是否是Ext.TabPanel的直接后代,javascript,extjs,Javascript,Extjs,到目前为止,我的每一个问题都已经在这里被问到和回答了,多亏了我在这里得到的所有时间机器的帮助但总有一天一切都会结束,所以我的第一个问题是: 出于错误处理的目的,我尝试在添加一些通用侦听器时将它们附加到所有感兴趣的组件。这可以通过Ext.ComponentMgr.all.on('add',function(cnt,cmp){})完成。然后我看看它是什么类型的组件,例如为每个按钮添加一个单击侦听器 我现在需要做的是向添加到tabpanel的每个面板添加一个activate侦听器。我的问题是:我不知道

到目前为止,我的每一个问题都已经在这里被问到和回答了,多亏了我在这里得到的所有时间机器的帮助但总有一天一切都会结束,所以我的第一个问题是:

出于错误处理的目的,我尝试在添加一些通用侦听器时将它们附加到所有感兴趣的组件。这可以通过
Ext.ComponentMgr.all.on('add',function(cnt,cmp){})
完成。然后我看看它是什么类型的组件,例如为每个按钮添加一个单击侦听器

我现在需要做的是向添加到tabpanel的每个面板添加一个activate侦听器。我的问题是:我不知道如何确定一个组件是否是tabpanel的直接后代,以及如何以正确的方式进行

我已经试过了:

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {
    if (cmp.ownerCt != undefined && cmp.ownerCt.getXType () == 'tabpanel') {
        console.log (cmp.getXType () + ' in tabpanel with id "' + cmp.getId ());
    }
});
坏的是,一些Ext文档读到“不依赖于ownerCt”,这是正确的:我的每个其他组件都有一个ownerCt,但当晚添加到tabpanels时没有面板

我知道有Ext.Panel.findParentByType(),但这会在上面的任何级别查找容器,我认为这不是正确的方法(->性能)


提前感谢您的回答

正如您所说,业主可能会在施工期间的任何时候被刺穿,具体取决于您的操作顺序。为什么不创建一个tab-panel子类来自动为您处理它呢?

我已经做了更多的尝试,并为自己找到了一个解决方案。我想我应该和你分享,也许有一天有人可以使用它:

当激发
Ext.ComponentMgr.all.on('add',function(cnt,cmp){})
时,ownerCt当然是空的,因为该组件仅已创建,但不一定添加到另一个组件

因此,我做了以下工作:

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {
  cmp.addListener ('added', function (cmp) {
    var parent = cmp.findParentByType ('tabpanel');
    if (parent != undefined) {
      if (parent.items.contains (cmp)) {
        cmp.addListener ('activate', function (cmp) {
          doThings();
        });
      }
    }
  });
}
  • 将组件添加到组件管理器(
    new Ext.Panel()
    )时,为添加到组件的
    创建侦听器
  • 添加时,检查是否有父项是选项卡面板
  • 如果是,请检查组件是否是tabpanel的直接后代(=包含在其项中)
  • 利润
这不是一个很好的解决方案,因为这意味着每次创建组件时都必须进行这些练习。创建一个tab-panel子类并直接在那里处理它将更加简单和干净。