我的视图模型中有以下属性,它们使用淘汰验证,其中之一是自定义验证来检查密码匹配。
model.Password = ko.observable()
.extend({ required: { message: "Password is required.",
params: true,
onlyIf: function () { return model.IsCredentialsRequired(); }}
});
model.ConfirmPassword = ko.observable().
extend({ validation: { validator: mustEqual,
message: 'Passwords do not match.',
params: model.Password,
onlyIf: function () { return model.IsCredentialsRequired(); } }
});
自定义验证函数的代码
var mustEqual = function (val, other) {
return val == other();
};
我找到OnlyIf
条件工作正常model.Password
根据model.IsCredentialsRequired()
但它不适合model.ConfirmPassword
,有人可以帮助我为什么会发生这种情况吗?还有其他方法可以对自定义规则使用条件验证吗?
提前致谢
Knockout-validation 目前不支持匿名规则的“onlyIf”。但它支持自定义规则。因此,您可以创建自定义规则并使用 onlyIf :
ko.validation.rules['confirmPasswordMatches'] = {
validator: function (val, params) {
var otherValue = params;
return val === ko.validation.utils.getValue(otherValue);
},
message: 'Passwords do not match.',
};
ko.validation.registerExtenders();
function ViewModel() {
var self = this;
self.IsCredentialsRequired = ko.observable(true);
self.Password = ko.observable()
.extend({
required: {
message: "Password is required.",
params: true,
onlyIf: self.IsCredentialsRequired
}
});
self.ConfirmPassword = ko.observable().
extend({
confirmPasswordMatches: {
params: self.Password,
onlyIf: self.IsCredentialsRequired
}
});
}
Fiddle: http://jsfiddle.net/delixfe/mFAEx/ http://jsfiddle.net/delixfe/mFAEx/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)