0

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

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

3 回答 3

2

您还可以设置窗口的 id,并检查 WindowManager(使用 each())来查看窗口是否已经在集合中。请参阅http://docs.sencha.com/extjs/4.0.7/#!/api/Ext.WindowManager

于 2013-09-24T12:16:39.293 回答
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();
}

这样,按钮可以保持对窗口的引用,并在再次创建它之前始终检查它是否存在。

于 2013-09-24T13:13:29.967 回答
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();
    }
});
于 2013-09-24T11:44:29.827 回答