我使用here中的areSame
规则:
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
函数中:
验证器:function(val,otherField){
调试器
return val === this.getValue(otherField);
},
然而,流程从未到过这一点。可能有什么不对?
修改
通过调用ko.validation.registerExtenders();
解决了不触发验证的问题,但规则并未按预期工作。问题是传递给otherField
的{{1}}变量是对象
validator
,正如您从源代码中看到的那样,方法{params:*observable here*}
并不期望这样。所以要么源代码错了,要么以错误的方式为规则定义了参数。那么哪一个?
答案 0 :(得分:8)
虽然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();
为了使用您的自定义规则,您不需要" params语法"所以你可以写:
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'
}
});