gpt4 book ai didi

knockout.js - 未触发自定义验证规则

转载 作者:行者123 更新时间:2023-12-04 17:49:03 24 4
gpt4 key购买 nike

我正在使用 areSame来自 here 的规则:

ko.validation.rules['areSame'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, otherField) {
return val === this.getValue(otherField);
},
message: 'The fields must have the same value'
};

并像这样应用它:
this.confirm = ko.observable().extend({
areSame: {
params:this.password
}
});

但它甚至从未被触发。我将调试器放入 validator规则定义的作用:
验证器:函数(val,otherField){
调试器
返回 val === this.getValue(otherField);
},
但是流程从未访问过这一点。有什么问题?

编辑:

调用 ko.validation.registerExtenders();解决不触发验证的问题,但是该规则无法按预期工作。问题是 otherField变量,即传递给 validator , 是对象 {params:*observable here*} , 其中作为方法 getValue不期望从源代码中可以看到。所以要么源代码错误,要么我以错误的方式定义了规则的参数。那么是哪一个?

最佳答案

虽然 Wiki 中没有明确说明(它在示例代码中,但不在描述中)但是

您需要调用ko.validation.registerExtenders()

在您定义自定义规则以注册它们之后:

ko.validation.rules['areSame'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, otherField) {
return val === this.getValue(otherField);
},
message: 'The fields must have the same value'
};

ko.validation.registerExtenders();

为了使用您的自定义规则,您不需要“参数语法”,因此您可以编写:
this.confirm = ko.observable().extend({
areSame: this.password
});

如果您想使用“params 语法”,您需要提供自定义错误 message属性,否则插件无法正确解释 otherField争论 :
this.confirm = ko.observable().extend({
areSame: {
params: this.password,
message: 'a custom error message'
}
});

关于knockout.js - 未触发自定义验证规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com