extjs 6.5.2 modern - beforeremove,beforeclose,close not firing

时间:2017-11-07 09:06:35

标签: javascript events extjs panel tabpanel

我注意到tabpanel beforeremovepanel' s beforecloseclose没有被解雇。另一方面,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,然后打开浏览器的开发者工具。

此外,如果beforeclose不在close内,paneltabpanel也可以正常投放。

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的回答,因为它解决了我的问题。但它是一个框架错误,它应该在下次更新时修复。

1 个答案:

答案 0 :(得分:0)

在这里演示:https://fiddle.sencha.com/#view/editor&fiddle/29dj

TL; DR听取“停用”和“删除”事件。

用户单击发生在选项卡栏(Ext.tab.Bar)而不是面板上,并且该栏是Ext.tab.Panel(扩展Ext.Container)的一部分。 因此,调用关闭选项卡的方法是Ext.tab.Panel的“onItemRemove”,而不是“关闭”Ext.Panel。 这就是你的听众无法工作的原因。

使用演示小提琴,您可以看到Ext.Panel触发的所有事件,并使用这些事件来执行您需要的操作。

修改

要在关闭之前显示确认消息,请使用小提琴:https://fiddle.sencha.com/#view/editor&fiddle/29hl