【问题标题】:Aggregate multiple max KO extend validations聚合多个最大 KO 扩展验证
【发布时间】:2018-01-03 23:02:18
【问题描述】:

我正在使用ko extend validation 进行验证, 试图做如下的事情。 ko.extend 不支持同一类型的多个绑定(在这种情况下为最大),它只添加第一条规则。 有没有办法用函数有条件地传递参数?还是我唯一的出路是编写自定义验证?

         myModel.prop2.extend({
            max: {
                onlyIf: function () {

                    var test = myModel.prop1() != undefined &&
                        myModel.prop1() !== "Percentage";
                    return test;
                },
                params: 100000
            }
        }).extend({
            max: {
                onlyIf: function() {
                    return myModel.prop1() != undefined &&
                        myModel.prop1() === "Percentage";
                },
                params: 100
            }
        });

【问题讨论】:

    标签: knockout.js knockout-validation


    【解决方案1】:

    我不确定,您真正想要实现的目标是什么。但是我认为您尝试的方式不是有效的方式。所以,你可能不得不使用类似下面的东西,

    Solution 1:

    您可以提供一个验证器或它们的数组。

    var testObj = ko.observable(3).extend({
            validation: [{
                validator: function (val, someOtherVal) {
                    return val === someOtherVal;
                },
                message: 'Must Equal 5',
                params: 5
            },{
                validator: function (val) {
                    return val !== 8;
                },
                message: 'Can not be 8',
                params: 8
            }]
        });
    

    Solution 2:

    ko.validation.rules['compareTo'] = {
        message: "Compare to",
        validator: function (val, params) {
            if (val === null || params.value() === null)
                return params.allowNull;
            switch (params.way) {
                case "<": return val < params.value();
                case "<=": return val <= params.value();
                case ">": return val > params.value();
                case ">=": return val >= params.value();
                default: throw new Error("params is not well defined");
            }
        }
    }
    
    myModel.prop2.extend({ compareTo: { 
                           message:"your message", 
                           params: { 
                                       way: ">=", 
                                       value: model.otherObs, 
                                       allowNull: true 
                           }, 
                           onlyIf: function () { /*your test*/ } 
                        }});
    

    希望这会有所帮助。,

    【讨论】:

      【解决方案2】:

      找到了解决办法,

      .extend({
                  validation: [{
                      validator: function (val, someOtherVal) {
                          if (myModel.prop1()() !== "Percentage") {
                              return val < someOtherVal;
                          }
                          return true;
                      },
                      message: "Too big!!!!",
                      params: 100000
                  }]
              })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2016-05-27
        • 2023-02-25
        • 2014-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多