ExtJs 窗口不显示

Posted

技术标签:

【中文标题】ExtJs 窗口不显示【英文标题】:ExtJs window doesn't show 【发布时间】:2013-05-15 06:50:38 【问题描述】:

我有一个切换按钮:

        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(); 放入函数中,则会显示该窗口。 有什么问题?

【问题讨论】:

intWin 是一个局部变量,不能从函数中访问 【参考方案1】:

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

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

【讨论】:

【参考方案2】:
    是的,表单通常也会被破坏 例如,您可以检查 intWin.body - 如果它为 null - 窗口被销毁

更新

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

id: 'intWin'

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

Ext.getCmp()

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

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

【讨论】:

以上是关于ExtJs 窗口不显示的主要内容,如果未能解决你的问题,请参考以下文章

Ext.Window在extjs 3.4中当前​​打开的窗口后面显示方法打开窗口

Extjs 5 GroupGrid 功能(MVVM)

当 Extjs 中的窗口大小发生变化时如何显示“分页工具栏”?

extjs gridpanel:当 GridPanel 窗口再次显示时,ColumnModel 变为空

EXTJS中grid的数据特殊显示,不同窗口的数据传递

在 ExtJS 中突出显示/选择网格行