如何在打开新窗口之前检查窗口是否已打开

时间:2013-09-24 11:26:20

标签: extjs extjs4

我正在创建一个单击按钮的窗口。如果我多次单击该按钮,则每次单击它时都会打开一个窗口。如果窗口已经打开,我该如何检查?如果打开关闭它,如果没有打开一个新的。

我正在使用以下代码来显示使用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();

3 个答案:

答案 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();
    }
});