我正在使用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
}
这里我要删除窗口和相关按钮。 每当我关闭窗口时,我有两个选择,如下所示
每次摧毁窗口并在点击图标时使用“新”创建是否是个好主意? close()和destroy()方法有什么区别?
答案 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(); }
}