最近在用Ext做界面设计的时候发现经常出现正常的页面在使用几次之后布局就乱七八糟的问题
查了下代码,发现是Ext的stateful作怪
在Component.js中有这么一句:
if(this.stateful !== false){
this.initState(config);
}
如果你调用Ext.state.Manager.setProvider启用了状态保持功能,很多component就会保持状态
saveState : function(){
if(Ext.state.Manager){
var state = this.getState();
if(this.fireEvent('beforestatesave', this, state) !== false){
Ext.state.Manager.set(this.stateId || this.id, state);
this.fireEvent('statesave', this, state);
}
}
可以看到保持的状态默认是用this.stateId || this.id做key,但是大部分component我们不会给他指定id,这时候ext就会默认给他生成一个id
getId : function(){
return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID));
}
可以看出这个id是从ext-comp-1000开始的字符串
很有可能一个界面在刷新后,两个不同component具有同一个id,这时候stateful就会搞错对象,举个例子
Ext.Window中保持的状态是:
getState : function(){
return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox());
},
getBox : function(local){
var s = this.el.getSize();
if(local === true){
s.x = this.el.getLeft(true);
s.y = this.el.getTop(true);
}else{
var xy = this.xy || this.el.getXY();
s.x = xy[0];
s.y = xy[1];
}
return s;
},
可以看到保存了Ext.Window的坐标以及大小,如果这些信息被加载到了其他component上面去了,不乱掉才怪
解决这个问题的办法是,默认禁掉stateful
1.不调用Ext.state.Manager.setProvider 不会启用保持
2.
if(this.stateful !== false){
this.initState(config);
}
改成
if(this.stateful){
this.initState(config);
}
默认就不保持状态,我就是这么干的
分享到:
相关推荐
Ext界面设计器 ExtDesigner. ext界面自动生成器 内附安装说明,破解文件
Ext界面生成器Ext界面生成器Ext界面生成器Ext界面生成器
ext4.1简单的登陆界面 包含login.jsp 验证码.jsp
Ext Designer ExtJs图形界面设计工具
这里面有ext 制作界面的一些心得,要用ext开发后台框架的可以运用下哦
Ext界面生成器 Ext界面生成器,EXT,UI
ext2.2包括登陆页面和主框架页面。 简洁,漂亮
EXT界面生成器 作者网站:http://tof2k.com/ext/formbuilder/ 汉化者网站:www.17ext.com EXT界面生成器 EXT界面生成器 EXT界面生成器
Ext界面开发面板比较!
Ext界面生成,功能不错!可以自动生成界面,适合Ext学习者
Ext界面生成器 Ext界面生成器 Ext界面生成器
ext 模拟window界面 表格 qq 地图
非常简洁漂亮的EXT.NET登录界面布局
Ext登陆界面源代码,仅供参考。此乃小弟辛辛苦苦学习后整理出来的,有从网上参考别人的代码,有自己整理的。
用Ext实现的用户管理界面,完成了部分。 包括用户列表; 用树展开的用户分组; 添加用户; 地址导航等。 预览: http://hi.baidu.com/lhj_5460/blog/item/03e6b3028b2fd9e708fa9387.html
已经修改、配置好了,直接运行index页面就行。用起来也还算可以,可视化设计界面,生成代码。
Ext中文帮助文档,提供ext2.1类库 主要有ext的常见界面代码
ext 的一些常用方法 ext 的一些常用方法 ext 的一些常用方法
这是从Sencha Touch官网上下载的Ext Designer的设计工具,我初步测试了一下,对于extjs3.0使用比较好,对于Extjs4.0的支持可能有一点问题,可能是本人太菜,大家可以研究一下。
完全使用ext做的界面,一个web管理数据库的运用,采用spring