【发布时间】:2018-04-19 14:41:45
【问题描述】:
我注意到tabpanel 的beforeremove 和panel 的beforeclose 和close 没有触发。另一方面,destroy 事件运行良好。是否有任何变通方法或不同的事件具有相同的结果?
我在下面的示例中重现了我的观察结果。
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.create('Ext.TabPanel', {
fullscreen: true,
tabBarPosition: 'bottom',
items: [
{
xtype: 'panel',
title: 'Home',
iconCls: 'home',
html: 'Home Screen',
closable: true,
listeners: {
beforeclose: function () {
console.log('beforeclose');
},
close: function () {
console.log('close');
},
destroy: function () {
console.log('destroy');
}
}
},
{
title: 'Contact',
iconCls: 'user',
html: 'Contact Screen'
}
],
listeners: {
beforeremove: function () {
console.log('beforeremove');
}
}
});
}
});
只需将示例添加到现代工具包中的sencha fiddle,然后打开浏览器的开发者工具即可。
此外,如果panel 不在tabpanel 内,beforeclose 和 close 会正常触发。
Ext.create({
xtype: 'panel',
title: 'Panel Title',
iconCls: 'x-fa fa-html5',
height: 400,
width: 400,
bodyPadding: 12,
html: 'Sample HTML text',
renderTo: Ext.getBody(),
listeners: {
beforeclose: function () {
console.log('beforeclose');
},
close: function () {
console.log('close');
}
}
}).close();
更新
-- 这是一个框架错误。所以我可能不得不等待更新。
-- 我接受了 Marco 的回答,因为它解决了我的问题。但这是一个框架错误,应该在下一次更新中修复。
【问题讨论】:
-
这里的问题是面板假设 closeAction 为“销毁”(默认情况下),所以只有销毁事件被触发。需要检查解决方法。
-
看看Panel.js关闭函数。
close和beforeclose应该被解雇。如果没有tabpanel容器,他们会这样做。 -
告诉我你在期待什么。留下这个问题,我只是想知道你的基本要求是什么。据此我可以告诉你解决方法。
-
因为它是可关闭
panels 的一个非常基本的功能。我想创建一个自定义panel将是我的最终解决方案。 -
您可以使用 dataview/tpl 执行类似的功能。
标签: javascript events extjs panel tabpanel