1

到目前为止,我的每一个问题都已经在这里被问及并得到了回答,非常感谢我已经来到这里的所有时间机器的帮助。:) 但总有一天一切都会结束,所以这是我自己的第一个问题:

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

我现在需要做的是为每个添加到选项卡面板的面板添加一个激活侦听器。我的问题是:我不知道如何确定组件是否是选项卡面板的直接后代以及如何以正确的方式进行操作。

我已经尝试过了:

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,但当晚添加到选项卡面板时没有面板。

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

提前感谢您的每一个答案!

4

2 回答 2

0

正如您所说,根据您执行操作的顺序, ownerCt 可能会在构建过程中随时插入。为什么不创建一个自动为您处理它的选项卡面板子类?

于 2012-12-18T10:19:13.013 回答
0

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

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()创建侦听器added
  • 添加时,检查是否有任何父级是选项卡面板
  • 如果是,请检查您的组件是否是选项卡面板的直接后代(= 包含在其项目中)
  • ???
  • 利润!
于 2012-12-18T16:49:54.033 回答