【问题标题】:Breeze: How to validate a property based on another property's valueBreeze:如何根据另一个属性的值验证一个属性
【发布时间】:2016-10-13 07:03:59
【问题描述】:

我在微风数据属性中使用了多个验证器。下面是使用的微风模式:

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

在上述模式中,将首先执行 required 规则,无论第一个验证器的结果如何,都会执行“maxLength”验证器。因此,即使该字段不是必需的,也会执行 maxLength 规则并捕获validationErrors。

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

提前致谢。

【问题讨论】:

    标签: javascript validation breeze


    【解决方案1】:

    如果您想在属性 A 具有特定值时使属性 B 成为必需,请不要使用标准所需的验证器。写一个custom validator

    这是一个将自定义验证器添加到 propertyB 的示例,它使得 propertyB 只有在 propertyA 为 true 时才需要

    这是可能的,因为传递给验证器函数的上下文参数微风包含一个“实体”属性,您可以访问该属性以检查 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."
           })
    );
    

    【讨论】:

    • 不,我是说,只有在所需的验证器为真时才需要执行 maxLength 验证器。如果该字段不是必需的,我不希望 maxLenght 验证器验证该字段。
    • 这完美地从实体中删除了验证器,但我希望忽略它而不是完全删除。因为,当该字段为“必填”时,我将使用该验证器。有什么想法吗?
    • 您是说该字段的必填状态会动态变化吗?有时需要,有时不需要?如果是,需要该字段的条件是什么?
    • 该字段(比如 fieldA)依赖于另一个字段(比如 fieldB)。所以,根据 fieldB 的值,fieldA 将是动态需要的。一旦 fieldA 的状态更改为 required,我想要运行 maxLength 验证器。
    • 知道了。我已经编辑了我的答案以包含此案例的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多