我在breeze数据属性中使用了多个验证器.Below是使用的breeze模式:
{
"name": "property",
"dataType": "String",
"validators": [
{
"name": "required",
"context": {
//Data for Processing
}
},
{
"name": "maxLength",
"context": {
//Data for processing
}
}
]
}
在上面的架构中,首先执行必需规则,而不管第一个验证器的结果是' maxLength'验证器将被执行。因此,即使不需要该字段,也会执行maxLength规则,并捕获validationErrors。
有没有办法根据所需验证器的结果运行maxLength验证器?
提前致谢。
答案 0 :(得分:1)
如果您想在物业A具有特定价值时需要提供物业B,请不要使用标准所需的验证器。写一个custom validator。
这是一个示例,其中将自定义验证器添加到propertyB,仅当propertyA为true 时才使propertyB成为。
这是可能的,因为上下文参数breeze传递给验证器函数包括一个"实体"您可以访问的属性来检查propertyA的值。
propertyB.validators.push(
new breeze.Validator(
"myCustomValidator",
function(value, context) {
// when propertyA is false, skip validation.
if (!context.entity.propertyA)
return true;
// validate the value is a string.
if (typeof value !== 'string')
return false;
// validate the value is not an empty string.
return value !== null && value.length > 0;
},
{
messageTemplate: "'%displayName%' must be a string and is required when property A is true."
})
);