Breeze:如何根据另一个属性的值验证属性

时间:2015-01-06 21:03:24

标签: javascript validation breeze

我在breeze数据属性中使用了多个验证器.Below是使用的breeze模式:

         {
            "name": "property",
            "dataType": "String",
            "validators": [
                  {
                      "name": "required",
                      "context": {
                         //Data for Processing
                      }
                  },
                  {
                      "name": "maxLength",
                      "context": {
                          //Data for processing
                      }
                  }
              ] 
           }

在上面的架构中,首先执行必需规则,而不管第一个验证器的结果是' maxLength'验证器将被执行。因此,即使不需要该字段,也会执行maxLength规则,并捕获validationErrors。

有没有办法根据所需验证器的结果运行maxLength验证器?

提前致谢。

1 个答案:

答案 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."
       })
);