`
Mint_Grass
  • 浏览: 62758 次
  • 性别: Icon_minigender_1
  • 来自: 新疆
社区版块
存档分类
最新评论

Ext.Window显示座标的问题(已解决)

阅读更多
系统环境:
主页的排板为: 左侧是系统功能树, 右侧以Tab的形式显示各个功能页面.

现用Ext.Window做了一个统一的选择人员窗口. 在普通的JSF页面上引用. 为了节约系统资源,
重写window的close()方法, 将其隐藏.

即: 用户每次在调用此Window的时候, 先判断当前Window是否已实例化(把window定义成一个全局变量进行引用), 如果未实例化时,才new window()出来, 如果已实例化过, 直接调用window.show().

问题的产生:
1.因为左侧显示系统具体功能的是Iframe, 随着各功能页面内容的不同, 很可能会出现滚动条.

2.当出现滚动后, 例如页面刚加载进来,有一个连接是调用此window的, 在滚动条滚动后, 在页面的下方还有一处也调用了此window.

3.因为第一次点击时,已实例了此window, 这时, window的显示座标已确定下来. 当滑动滚动条,点击第二个选择人员功能时, window还是会显示在第一次实例化时, 所计算出来的position. (如果每次window都是new出来的话,不会存在此问题. 此时必须重新设定其position才行.)

解决方案:
1.发现Ext.Window中有一个方法 syncSize(), 具体说明如下:
引用

syncSize() : Ext.BoxComponent
Force the component's size to recalculate based on the underlying element's current height and width.
Force the component's size to recalculate based on the underlying element's current height and width.
Parameters:

    * None.

Returns:

    * Ext.BoxComponent
      this

尝试在window.show()之前调用此方法, 但却报错. (this.el 为空). 由于时间关系,没有继续研究如何解决.

2.其实之前最先想到的方法是 setPosition(), 但由于参数没有确定下来,所以才想尝试syncSize(). 没办法, 继续研究setPosition()方法的参数. 经测试:
引用

document.body....出来的参数,都没有达到预期效果.
最后使用:window.innerwidth 和 window.innerHeight 解决了.


最终代码如下:
if(!_orgWin)
    _orgWin = new OrganizationWindow();
_orgWin.setPosition(window.innerwidth, window.innerHeight);
_orgWin.show();

0
0
分享到:
评论
1 楼 michael88wen 2011-08-09  
我用 ContentPanel 的 syncSize  可以同步树

相关推荐

Global site tag (gtag.js) - Google Analytics