论坛首页 Web前端技术论坛

Ext.FromPanel的bug, 相信你们很多人可能会碰到

浏览 5496 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-07   最后修改:2010-07-09
当移除一个FormPanel上的Item时, 再调用FormPanel的doLayout(), 会抛异常;

演示代码:
var text = new Ext.form.TextField({});

var form = new Ext.FormPanel({
    // ...若干代码省略...
    items: [text]
});

form.remove(text);
form.doLayout();


咱们来看看这个异常是怎么产生的.

有个Ext.form.MessageTargets类, 这个类的代码在/src/widgets/form/Field.js里面, 主要是用来处理Field类validate的错误信息提示;

当FromPanel设置msgTarget=='side'时, Field会往父容器注册一个afterlayout事件监听
if (field.ownerCt) {
     field.ownerCt.on('afterlayout', field.alignErrorIcon, field);
     field.ownerCt.on('expand', field.alignErrorIcon, field);
}


当Field对象被销毁之后, 如果一旦触发了afterlayout或expand事件, 那么会就抛异常"field.alignErrorIcon is not a function";

   发表时间:2010-07-08  
还没此应用,要移除做什么呢?
0 请登录后投票
   发表时间:2010-07-08  
joehe 写道
还没此应用,要移除做什么呢?


我只是描述这么一种情况

你也可以是这样

var text = new Ext.form.TextField({});

var form = new Ext.FormPanel({
    // ...若干代码省略...
        
    renderTo: 'form-ct',

    items: [text]
});

form.remove(text);

form.add(new Ext.form.TextField({}));

form.doLayout();


0 请登录后投票
   发表时间:2010-07-09  
前几天刚好遇到一个类似的应用,也是formpanel动态 删除 添加组件,当时把删除的组件放在一个panel中,panel放在formpanel里面,像楼主一样,remove(text),也抛异常,后来只好 remove(text的id)才正常
0 请登录后投票
   发表时间:2010-07-11  
wuzhen 写道
前几天刚好遇到一个类似的应用,也是formpanel动态 删除 添加组件,当时把删除的组件放在一个panel中,panel放在formpanel里面,像楼主一样,remove(text),也抛异常,后来只好 remove(text的id)才正常


为什么remove(text的id)才正常?
3 请登录后投票
   发表时间:2010-07-31  
如果是form.items.remove(text),然后doLayout()呢?
一般在项目中,我的处理方法是将这个控件disable,然后hide,就可以实现相应的需求了……
0 请登录后投票
   发表时间:2010-08-03  
这正体现的一个需求有多种解决方案
0 请登录后投票
   发表时间:2010-08-04  
不明白这个帖子为啥会被投新手?
0 请登录后投票
   发表时间:2011-03-23  
我也不明白,可能都是大牛吧
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics