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;
转载于:https://blog.51cto.com/wangyuelucky/1409834
本文介绍如何解决ExtJS表单在加载记录时触发验证导致界面显示异常的问题。通过重写`setValues()`方法并调整`hasChanged`属性状态,实现新建表单时避免自动验证,确保用户界面正常展示。

1084

被折叠的 条评论
为什么被折叠?



