到目前为止,我的每一个问题都已经在这里被问到并回答了,非常感谢我已经到过这里的所有时间机器帮助。 :)但一切都结束了一天,所以这是我自己的第一个问题:
出于错误处理的目的,我正在尝试将一些通用侦听器附加到所有有趣的组件中。这可以使用Ext.ComponentMgr.all.on('add', function (cnt, cmp) {})
完成。然后我查看它是什么类型的组件,例如为每个按钮添加一个点击监听器。
我现在需要做的是为每个添加到tabpanel的面板添加一个激活监听器。我的问题是:我不知道如何确定组件是否是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 doc读取“不要依赖ownerCt”并且它是正确的:我的所有其他组件都有一个ownerCt,但是在向tabpanels添加时没有面板。
我知道有Ext.Panel.findParentByType(),但这会在上面的任何级别找到容器,我认为这不是正确的方法( - >性能)。
提前感谢您的每一个答案!
答案 0 :(得分:0)
正如你所说,所有者可能会在施工过程中的任何时间进行探查,具体取决于你的执行顺序。为什么不创建一个自动为您处理它的选项卡面板子类?
答案 1 :(得分: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
创建一个侦听器