ext版本:4.2
需求:
在数据record绑定到form的时候,Ext会触发field的change事件和validate事件。以至于,新建的空表单界面,会出现验证不通过的样式,如下图:
解决思路:
在form loadRecord之前,禁止field的change()事件,loadRecord之后,开启field的change()事件。loadRecord方法会调用basicForm的setValues()方法,所以,重写setValues()方法,如下:
Ext.override(Ext.form.BasicForm, { setValues: function (values) { var me = this,hasChanged = me.owner.hasChanged, v, vLen, val, field; function setVal(fieldId, val) { var field = me.findField(fieldId); if (field) { /** form加载数据的时候不验证*/ if (hasChanged) { var d = field.disabled; field.disabled = true; field.setValue(val); field.disabled = d; } else { field.setValue(val); } if (me.trackResetOnLoad) { field.resetOriginalValue(); } } } Ext.suspendLayouts(); if (Ext.isArray(values)) { vLen = values.length; for (v = 0; v < vLen; v++) { val = values[v]; setVal(val.id, val.value); } } else { Ext.iterate(values, setVal); } Ext.resumeLayouts(true); return this; } });
在项目代码中,调用如下:
infoForm.hasChanged = true; infoForm.loadRecord(record); infoForm.hasChanged = false;
ext4 form loadrecord disable validate
时间: 2024-11-01 04:29:28