如何获得模型的验证错误,特别是 Ext JS 5.0 ?与版本4.2一样,我们这样做了:
var rec = Ext.create("ModelName", {...});
var errors = rec.validate();
if (!errors.isValid()) {
form.markInvalid(errors);
}
但是validate()
现在在文档中被标记为已弃用,并且调用它不再返回任何错误消息。我已经查看了5.0中引入的getValidation()
方法,但它没有返回任何可以传递给表单组件的错误消息,并且没有明确的示例说明如何实现这一点
答案 0 :(得分:4)
我总是使用表单中的验证器反过来配置我的配置 - 这样Ext.form.Panel
isValid
会根据需要自动标记相关字段。尽管getValidation
返回一个私有实用程序类,可能会使代码容易受到框架未来版本更改的影响,但通过一些修改 - 预先警告是相当直截了当的。
首先,Ext.data.Model
getValidation
会返回Ext.data.Validation
的实例,这个实例本身就是一个简单的数据模型。它基本上是每个字段的键值映射,具有相应的有效性 - 如果值严格布尔true
则该字段有效,其他任何 即 a string
(错误消息)然后该字段无效。为方便起见,您可以编写一个函数,以您需要的格式返回错误 - 在本例中,我已经覆盖了验证模型本身,但理想情况下,您可以通过扩展或者{{3}将逻辑合并到您自己的模型中}:
Ext.define('override.data.Validation', {
override: 'Ext.data.Validation',
getErrors: function(){
var errors = [];
Ext.iterate(this.getData(), function(field, value){
if(true !== value) this.push({ id: field, msg: value });
}, errors);
return errors;
}
});
然后按如下方式修改上面的逻辑:
var rec = Ext.create("ModelName", { /***/ });
if(!rec.isValid()){
form.markInvalid( rec.getValidation().getErrors() );
}
值得注意的是,如果您以这种方式验证模型,» demo / fiddle验证器似乎总是返回true
(有效),无论您是否设置了值 - 大概是因为{{ {1}}会出现在记录对象原型上吗?所以我在演示中加入了一个自定义验证器:
defaultValue