2

我有一个切换按钮:

        var button =  new Ext.Button({
        tooltip: "Интенсивность",
        iconCls: "gxp-icon-intensity",
        enableToggle:true,
        toggleHandler: function (button, state) {
            if(state){
                alert(state)
                map.getLayersByName("Интенсивность")[0].setVisibility(true);
                intWin.show();
            }else{
                map.getLayersByName("Интенсивность")[0].setVisibility(false);
                alert(intWin.collapsed);
                //intWin.close();
            }
        }
    });

当按钮被切换时,我会显示一个窗口:

    var intWin = new Ext.Window({
        id: 'intWin', 
        layout: 'fit',
        title:'Интенсивность',
        autoScroll:false,
        width:300,
        items:[/*intForm*/]
    });

当我关闭窗口时,按钮会取消切换。但是当我再次单击它时,我没有得到一个窗口。Firebug 显示此错误:

 TypeError: b.dom is undefined

...String(this.enableUrlEncode)?this.enableUrlEncode:"data"]=Ext.encode(b);g.params...

这里有什么问题?

更新

好吧,我的错。我试图展示一个被破坏的元素。

但是在这种情况下:
1 当我关闭窗口并被销毁时,该窗口中的任何表单也会被销毁吗?
2 如何检查窗口是否被破坏?

更新2

现在我尝试这个函数来创建窗口:

    function intWinCreate(){
        var intWin = new Ext.Window({
            id: 'intWin', 
            layout: 'fit',
            title:'Интенсивность',
            autoScroll:false,
            width:300,
            items:[/*intForm*/]
        });
    };

并在按钮处理程序中:

                intWinCreate();
                intWin.show();

但我收到一个错误:

  ReferenceError: intWin is not defined

如果我intWin.show();输入该函数,则显示该窗口。
有什么问题?

4

2 回答 2

5

当一个元素被破坏时,它里面的所有东西也会被破坏。

在您的情况下,您通过设置属性将关闭操作的默认行为更改为隐藏,closeAction: 'hide'它将导致窗口隐藏而不是被破坏。

前任:

var intWin = new Ext.Window({
    id: 'intWin', 
    layout: 'fit',
    closeAction: 'hide',
    title:'Интенсивность',
    autoScroll:false,
    width:300,
    items:[/*intForm*/]
});

更新:
这是因为intWin是方法中的局部变量intWinCreate。您可以做的是从该方法返回窗口并在其上调用 show。

function intWinCreate(){
    return new Ext.Window({
        id: 'intWin', 
        layout: 'fit',
        title:'Интенсивность',
        autoScroll:false,
        width:300,
        items:[/*intForm*/]
    });
};

然后

intWinCreate().show()
于 2013-05-15T07:16:39.483 回答
1
  1. 是的,形式通常也被破坏
  2. 例如,您可以检查 intWin.body - 如果它为 null - 窗口被销毁

更新

我看到你已经有了一个答案,但我也有另一个给你;)只要你设置

id: 'intWin'

您可以使用从任何地方访问此窗口

Ext.getCmp()

所以你可以用这个来展示它:

Ext.getCmp('intWin').show()
于 2013-05-15T07:17:20.447 回答