您的自定义验证器代码没问题。但是你没有正确调用ko.validation.registerExtenders();
方法。
虽然没有明确说明,但你需要调用ko.validation.registerExtenders();
before你正在打电话ko.applyBindings
.
因此,要修复您的代码,您只需编写:
$(document).ready(function () {
ko.validation.registerExtenders();
ko.applyBindings(new UserAccount(initdata), $("#UserAccount").get(0));
});
但你会面临另一个问题:mustEqual
验证器用于与静态值进行比较,因此如果您想比较密码和确认密码等两个属性,它将不起作用。
你需要的是类似的东西用户贡献的“相同”验证器 https://github.com/Knockout-Contrib/Knockout-Validation/wiki/User-Contributed-Rules#are-same:
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'
};
你可以使用什么,例如:
self.Password = ko.observable(data.Password).extend({
required: true,
minlength: 6,
message: "Password is required",
maxLength: 12
});
self.ConfirmPassword = ko.observable().extend({
areSame: self.Password
});
Demo JSFiddle http://jsfiddle.net/nemesv/trvz7/1.