Javascript 如何避免在Extjs 4中对隐藏字段进行验证
当容器具有Javascript 如何避免在Extjs 4中对隐藏字段进行验证,javascript,extjs,extjs4,extjs4.1,Javascript,Extjs,Extjs4,Extjs4.1,当容器具有hidden:true而不是实际字段时,如何不验证隐藏字段 为了解决这个问题,我做了以下的重写,它起了作用,尽我所能不影响正常的验证流程,所以代码看起来不太好 /* traverse up and look for a hidden Parent/Ancestor */ Ext.override(Ext.form.field.Base, { isParentHidden: function () { return this.up('[hidden=true]')
hidden:true
而不是实际字段时,如何不验证隐藏字段
为了解决这个问题,我做了以下的重写,它起了作用,尽我所能不影响正常的验证流程,所以代码看起来不太好
/* traverse up and look for a hidden Parent/Ancestor */
Ext.override(Ext.form.field.Base, {
isParentHidden: function () {
return this.up('[hidden=true]');
}
});
/* override isValid basic method to consider skipValidateWhenHidden property,
when skipValidateWhenHidden is set to true code should check if the elementor it's Parent/Ancestors is hidden */
Ext.override(Ext.form.field.Base, {
isValid: function () {
var me = this,
disabled = me.disabled,
isHidden = me.isHidden(),
skipValidateWhenHidden = !!me.skipValidateWhenHidden,
validate = me.forceValidation || !disabled,
isValid = validate ? me.validateValue(me.processRawValue(me.getRawValue())) : disabled;
if (isValid || !skipValidateWhenHidden) {
return isValid;
}
if (skipValidateWhenHidden) {
isHidden = isHidden ? true : me.isParentHidden();
if (isHidden) {
return skipValidateWhenHidden;
}
}
return isValid;
}
});
最终,我将能够执行以下操作,即在字段中将属性设置为true,这样,如果它对用户不可见,它将通过验证
{
itemId: 'City',
cls: 'AddressCity',
xtype: 'textfield',
emptyText: emptyCityText,
skipValidateWhenHidden: true,
},
隐藏父项时,禁用字段可能更容易。如上所述,禁用的字段将自动被视为有效字段
然后,您可以在每个视图的基础上处理此问题,并在父级显示/隐藏事件上实现侦听器,以启用/禁用其中的表单字段。我也遇到过同样的情况,并最终执行了以下操作:
if (!me.isFormValid(form)) {
...
}
isFormValid: function (form) {
var isValid = true,
fields = form.getForm().getFields();
fields.each(function (field) {
if (!field.isHidden || (field.isHidden && !field.isHidden())) {
isValid = isValid && field.isValid();
}
});
return isValid;
},
我已经考虑过,我知道禁用按钮会使它们跳过验证,但就我而言,动态显示和隐藏父项的父项,并且在执行显示和隐藏时管理字段状态并不容易。为了清晰起见,我放了一个示例来说明这一想法。在我在
fieldcontainer
上实现的简单侦听器中,我查询容器下的所有字段
组件。因此,从理论上讲,无论父项是如何显示或隐藏的,字段都会自动为您禁用/启用。我只是想把一些东西放在一起看看是否对你有帮助。谢谢你,这看起来是很多但不是所有情况下的一个有效解决方案,再一次,如果多了一个嵌套级别,它将不起作用,例如,在我的情况下,我有一个address类,在我有CityStateZip类的下面有一个级别。我知道它不应该是嵌套的,但是考虑到逻辑和这些类附带的代码量,我认为这是有意义的。无论如何,谢谢你的建议。我的一个同事在mixins做了同样的事情。