Ext 界面经常乱掉问题解决方法

最近在用Ext做界面设计的时候发现经常出现正常的页面在使用几次之后布局就乱七八糟的问题 
查了下代码,发现是Ext的stateful作怪 
在Component.js中有这么一句: 
Java代码   收藏代码
  1. if(this.stateful !== false){  
  2.         this.initState(config);  
  3.     }  

如果你调用Ext.state.Manager.setProvider启用了状态保持功能,很多component就会保持状态 
Java代码   收藏代码
  1. saveState : function(){  
  2.         if(Ext.state.Manager){  
  3.             var state = this.getState();  
  4.             if(this.fireEvent('beforestatesave'this, state) !== false){  
  5.                 Ext.state.Manager.set(this.stateId || this.id, state);  
  6.                 this.fireEvent('statesave'this, state);  
  7.             }  
  8. }  

可以看到保持的状态默认是用this.stateId || this.id做key,但是大部分component我们不会给他指定id,这时候ext就会默认给他生成一个id 
Java代码   收藏代码
  1. getId : function(){  
  2.     return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID));  
  3. }  

可以看出这个id是从ext-comp-1000开始的字符串 
很有可能一个界面在刷新后,两个不同component具有同一个id,这时候stateful就会搞错对象,举个例子 
Ext.Window中保持的状态是: 
Java代码   收藏代码
  1. getState : function(){  
  2.     return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox());  
  3. },  
  4. getBox : function(local){  
  5.     var s = this.el.getSize();  
  6.     if(local === true){  
  7.         s.x = this.el.getLeft(true);  
  8.         s.y = this.el.getTop(true);  
  9.     }else{  
  10.         var xy = this.xy || this.el.getXY();  
  11.         s.x = xy[0];  
  12.         s.y = xy[1];  
  13.     }  
  14.     return s;  
  15. },  

可以看到保存了Ext.Window的坐标以及大小,如果这些信息被加载到了其他component上面去了,不乱掉才怪 
解决这个问题的办法是,默认禁掉stateful 

1.不调用Ext.state.Manager.setProvider 不会启用保持 
2.
Java代码   收藏代码
  1. if(this.stateful !== false){  
  2.         this.initState(config);  
  3.     }  
改成 
Java代码   收藏代码
  1. if(this.stateful){  
  2.         this.initState(config);  
  3.     }  
默认就不保持状态,我就是这么干的 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值