破坏窗户



我正在使用ExtJs4。

new Ext.Window({
    id: token + '_window',
    animateTarget: token + '_taskbar',  //Button id
    height: 300,
    width: 300,
    title: name,
    maximizable: true,
    minimizable: true,
    iconCls: 'basketball-small-icon',
    html: 'This is the <b>' + name + '</b> window',
    listeners: {
        'beforeclose': onWindowClose,
        'minimize': function(){ this.hide(); }
    }

请注意与动画目标关联的按钮。在这里onWindowClose被定义为

function onWindowClose(t){
var token = t.id.split('_')[0];
var taskBarItemId = token + '_taskbar';
Ext.getCmp(taskBarItemId).destroy(); //Destroying the button
t.destroy();  //Destroying the window
}

在这里我想删除窗口和相关的按钮。每次我关闭窗口,我都有两个选择,如下

  • 我可以破坏按钮和窗户,但有时我无法再打开窗户。我认为这和按钮链接到窗口的"animateTarget"有关。因为当我删除此属性时,它可以正常工作
  • 我可以用t.close()代替t.destroy(),但它变成了递归的。如何调用基关闭方法

每次都破坏窗口,每次点击图标都使用"new"创建,这是个好主意吗?close()和destroy()方法之间的区别是什么?

如果我理解得很好,您希望重用具有不同内容的窗口。因此,您应该只创建一个窗口,通过更新html内容并在此窗口上调用show()来重用它。要执行此操作,您需要添加属性closeAction:'hide'。这样,当单击关闭按钮时,您的窗口不会被破坏。

test = new Ext.Window({
    id: token + '_window',
    animateTarget: token + '_taskbar',
    height: 300,
    width: 300,
    title: name,
    maximizable: true,
    minimizable: true,
    closeAction: 'hide',
    iconCls: 'basketball-small-icon',
    html: 'This is the <b> imad </b> window',
    listeners:{
        'beforehide':function(win){
            Ext.getCmp(win.animateTarget).hide();
        }
    }
});

然后,您将这个监听器添加到您的按钮中:

    listeners:{
        'click':function(){
            var token = t.id.split('_')[0];
            var targetWindow = Ext.getCmp('token + '_window);
            targetWindow.body.dom.innerHtml = 'Your new html !';
            targetWindow.show();
        }
    }

您不必调用destroy(),因为一旦窗口关闭,它就会自动销毁
请参阅Ext.Window的api。
并且不要在beforecase处理程序中调用close(),因为它已经要关闭了

我认为,每当你想创建一个窗口并关闭它时,你可以使用"new"——点击关闭标题工具(右上角)或调用其close()方法。不要担心破坏。Ext会这么做。

close()和destroy()之间的主要区别是关闭"beforecluse"事件,并根据配置选项"closeAction"决定是关闭窗口还是隐藏窗口。如果它决定关闭,将调用destroy()。

编辑:尝试以下

function onWindowClose(t){
    var token = t.id.split('_')[0];
    var taskBarItemId = token + '_taskbar';
    Ext.getCmp(taskBarItemId).destroy(); //Destroying the button
    //t.destroy();  //Remove this statement.
    return true;
}

EDIT2:删除最小化侦听器

listeners: {
    'beforeclose': onWindowClose//,
     //'minimize': function(){ this.hide(); }
}

相关内容

  • 没有找到相关文章

最新更新