我正在创建一个单击按钮的窗口。如果我多次单击该按钮,则每次单击它时都会打开一个窗口。如果窗口已经打开,我该如何检查?如果打开关闭它,如果没有打开一个新的。
我正在使用以下代码来显示使用extjs的窗口。
var modiwin = Ext.create('widget.window', {
height: 70,
width: 110,
title: 'Editing',
closable: true,
autoScroll: false,
collapsible: true,
//modal:'True',
maximizable: false,
resizable:false,
items: [mdsavebtn,mddelbtn]
});
modiwin.setPosition(175,55);
modiwin.show();
答案 0 :(得分:2)
您还可以设置窗口的ID,并检查WindowManager(使用each())以查看窗口是否已存在于集合中。见http://docs.sencha.com/extjs/4.0.7/#!/api/Ext.WindowManager
答案 1 :(得分:2)
如果您的代码在处理函数或其他内容中,我通常会这样做:
handler: function(button){
if(!button.modiwin)
{
button.modiwin = Ext.create('widget.window', {
height: 70,
width: 110,
title: 'Editing',
closable: true,
autoScroll: false,
collapsible: true,
//modal:'True',
maximizable: false,
resizable:false,
items: [mdsavebtn,mddelbtn]
});
}
button.modiwin.setPosition(175,55);
button.modiwin.show();
}
这样,按钮可以保持对窗口的引用,并在再次创建窗口之前始终检查它是否存在。
答案 2 :(得分:1)
在窗口的close
事件上添加一个侦听器以跟踪状态窗口。实质上会产生类似下面的内容。你可能应该比这个例子更好地组织你的代码,方法是将窗口引用保存在类属性而不是像我那样的范围变量。
var modiwin = null;
function showModiWin() {
modiwin = Ext.widget('window', {
height: 70,
width: 110,
title: 'Editing',
closable: true,
autoScroll: false,
collapsible: true,
//modal:'True',
maximizable: false,
resizable:false,
items: [mdsavebtn,mddelbtn]
});
modiwin.on('close', function() {
// ensure the old window is cleaned out (in case its close
// action just hides it)
modiwin.destroy();
// remember we don't have a window anymore
modiwin = null;
});
modiwin.setPosition(175,55);
modiwin.show();
}
Ext.widget('button', {
renderTo: Ext.getBody()
,text: "Open window"
,handler: function() {
// close the previous window, if any
if (modiwin) {
modiwin.close();
}
showModiWin();
}
});