ExtJs窗口不显示

时间:2013-05-15 06:50:38

标签: javascript extjs extjs3

我有一个切换按钮:

        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如何检查窗口是否被破坏?

UPDATE2

现在我尝试使用此功能创建窗口:

    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();放入该功能,那么该窗口会显示。
什么可能是错的?

2 个答案:

答案 0 :(得分:4)

当元素被破坏时,其中的所有内容也会被破坏。

在您的情况下,您通过设置属性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()

答案 1 :(得分:1)

  1. 是的,表格通常也会被销毁
  2. 例如,您可以检查intWin.body - 如果它为null - 窗口被销毁
  3. <强>更新

    我看到你已经有一件衣服,但我也有另一件衣服;) 只要你设置

    id: 'intWin'
    

    您可以使用

    从任何地方访问此窗口
    Ext.getCmp()
    

    所以你可以用它来表明:

    Ext.getCmp('intWin').show()