聚合多个最大KO扩展验证

时间:2017-07-28 02:35:36

标签: knockout.js knockout-validation

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

         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
            }
        });

2 个答案:

答案 0 :(得分:0)

找到解决方案,

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

答案 1 :(得分:0)

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

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*/ } 
                    }});

希望这会有所帮助。