【问题标题】:Multiple validators for single complex type data property单个复杂类型数据属性的多个验证器
【发布时间】:2015-01-06 05:22:10
【问题描述】:

我遇到了一个场景,其中两个数据属性使用相同的复杂类型。下面是使用的实体。

    {
        "name": "dataProperty1",
        "complexTypeName": "ComplexType:#test"
    },
    {
        "name": "dataProperty2",
        "complexTypeName": "ComplexType:#test"
    }

复杂类型:

{
    "shortName": "ComplexType",
    "namespace": "test",
    "isComplexType": true,
    "dataProperties": [
            {
            "name": "fieldA",
            "dataType": "String",
            "maxLength": 50
        }
]
}

现在我的问题是,两个数据属性(dataProperty1 和 dataProperty2)都对复杂类型数据属性(fieldA)进行了特定验证。

我尝试为复杂数据属性 (fieldA) 添加两个不同的验证器,但两个验证器都在为这两个数据属性执行。

            {
                "name": "fieldA",
                "dataType": "String",
                "maxLength": 50,
                "validators"[
                      {
                         //name :validationA
                      },
                      {
                         //name :validationB
                      }
                 ]
            }

假设“dataProperty1”只需要执行“validationA”,“dataProperty2”只需要执行“validationB”。

在这种情况下有什么特别需要处理的吗?

请帮助解决此问题。

提前致谢。

【问题讨论】:

    标签: angularjs validation breeze complextype


    【解决方案1】:

    在您的验证函数中,“context”参数将具有“propertyName”属性。此“propertyName”将是您的属性的路径,因此您可以区分“billingAddress”和“locationAddress”。此外,如果您验证 complexType 的子属性,则“context.propertyName”将是您的属性的虚线路径,即“billingAddress.city”与“locationAddress.city”之类的东西。

    所以你可以写一个这样的验证器

      var valFn = function (v, context) {
        var propName = context.propertyName;
        // change the validation logic here depending on the 'propName';
      };
      var myValidator = new Validator("MyValidator", valFn,
          { messageTemplate: "Custom message template..." });
    

    【讨论】:

    • 我能够在验证器中获取属性名称,但是我想如何跳过已经在微风中注册的验证器。假设只需要为“billingAddress.city”执行一个验证器,但为“city”复杂类型属性注册了两个验证器。或者,有没有办法对不同数据属性中使用的相同复杂类型属性进行两种不同的验证?
    • 让验证器检查 propertyName 并在不相关时执行 noop。即验证器将始终执行,但对于除 'billingAddress.city' 之外的任何 'city' 属性,它将始终成功。
    • 我想我让它变得更复杂了。简单来说,一个必需的验证器存在于一个名为“city”的复杂类型数据属性中。复杂类型由两个数据属性“property1”和“property2”使用。现在,我希望只有“property1”而不是“property2”才需要城市。对这个案例有什么建议吗?
    • 我上面说的。创建单个“城市”验证器并在验证器内部检查 propertyName 是否为“property1.city”,如果是,则执行验证,如果 propertyName 为“property2.city”,则只需返回 true。 (即“property2.city”的验证总是成功)
    • 感谢您的快速回复。我的另一个问题是,如果我们有两个验证器用于单个复杂的属性(城市),比如说 property1.city 我必须运行一个验证器,而对于 property2.city 我必须运行另一个验证器。这种情况可以在类似的方式或如何处理?
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2014-02-10
    • 2015-02-27
    相关资源
    最近更新 更多