动态 添加 fieldSet

本文介绍使用ExtJS框架时如何正确地动态添加并管理FieldSet组件,避免表单验证出现错误。通过调整FieldSet与FormPanel之间的关联方式,确保在动态添加或移除FieldSet时,所有字段能够正常进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML/HTML代码
//Create the Form    
testForm = new Ext.form.FormPanel({
name: "form1",
frame:true,
width: 350,
items: [{
xtype: "textfield",
name: "nom",
fieldLabel: "nom",
allowBlank: false
}]
});
//Render the form
testForm.render(Ext.get('idForm'));
//Create the fieldset
testFieldSet = new Ext.form.FieldSet({
name: 'testFieldSet',
autoHeight: true,
items: [{
xtype : "textfield",
name : "testtextvalid",
fieldLabel: "testDyn",
allowBlank: false
}]
});
testForm.add(testFieldSet); //add the fieldset to the formpanel

testForm.doLayout();
===========this is the workaround============
testFieldSet.form = testForm.getForm();
testForm.initFields.call(testFieldSet);
//delete testForm.form;原来是有这一行的,但加上后连getForm()都不好用了,去掉就没问题了
===========this is the workaround============
OK,一切恢复正常!


=================================================================================================


workaround部分仅对动态增加FieldSet时有用,而如果被添加的FieldSet可以被删除(remove或者destroy)时,校验仍然会产生错误的,此时必须将FieldSet中的每一个Field在BaseForm中remove掉。
代码如下
var f = fieldset.form || fieldset.ownerCt.getForm();
fieldset.items.each(function(item) {
f.remove(item);
});
fieldset.destroy();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值