extjs 6.5.2 modern - beforeremove、beforeclose、close not firing
extjs 6.5.2 modern - beforeremove, beforeclose, close not firing
我注意到 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');
}
}
});
}
});
只需将示例添加到 Modern toolkit 中的 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 的回答,因为它解决了我的问题。但这是一个框架错误,应该在下一次更新中修复。
此处演示:https://fiddle.sencha.com/#view/editor&fiddle/29dj
TL;DR 监听 "deactivate" 和 "removed" 事件。
用户点击发生在标签栏 (Ext.tab.Bar) 而不是您的面板上,该栏是 Ext.tab.Panel 的一部分(扩展 Ext.Container)。
因此,调用关闭选项卡的方法是 Ext.tab.Panel 的 "onItemRemove",而不是 Ext.Panel 的 "close"。
这就是您的听众不起作用的原因。
通过演示 fiddle,您可以看到您的 Ext.Panel 触发的所有事件,并使用这些事件来执行您需要的操作。
编辑
要在关闭前显示确认消息,这里是 fiddle:https://fiddle.sencha.com/#view/editor&fiddle/29hl
我注意到 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');
}
}
});
}
});
只需将示例添加到 Modern toolkit 中的 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 的回答,因为它解决了我的问题。但这是一个框架错误,应该在下一次更新中修复。
此处演示:https://fiddle.sencha.com/#view/editor&fiddle/29dj
TL;DR 监听 "deactivate" 和 "removed" 事件。
用户点击发生在标签栏 (Ext.tab.Bar) 而不是您的面板上,该栏是 Ext.tab.Panel 的一部分(扩展 Ext.Container)。 因此,调用关闭选项卡的方法是 Ext.tab.Panel 的 "onItemRemove",而不是 Ext.Panel 的 "close"。 这就是您的听众不起作用的原因。
通过演示 fiddle,您可以看到您的 Ext.Panel 触发的所有事件,并使用这些事件来执行您需要的操作。
编辑
要在关闭前显示确认消息,这里是 fiddle:https://fiddle.sencha.com/#view/editor&fiddle/29hl