摧毁窗户

时间:2012-02-23 05:24:38

标签: extjs event-handling window extjs4

我正在使用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(); }
    }

请注意与animate目标关联的按钮。 这里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(),但它会变为递归。如何调用基本关闭方法?

每次摧毁窗口并在点击图标时使用“新”创建是否是个好主意? close()和destroy()方法有什么区别?

2 个答案:

答案 0 :(得分:2)

如果我理解得很好,您希望重复使用具有不同内容的窗口。 因此,您应该只创建一个窗口,通过更新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();
        }
    }

答案 1 :(得分:0)

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

我认为无论何时你想创建一个窗口并关闭它都可以使用'new',或者点击关闭标题工具(右上角)或调用它的close()方法。不要担心毁灭。 Ext会这样做。

close()和destroy()之间的主要区别是近似火灾'beforeclose'事件,并根据配置选项'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(); }
}