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 中的窗口大小发生变化时如何显示“分页工具栏”?