这是实现目标的简单方法:
首先设置验证配置并使用此 tid 位启用它:
ko.validation.init({
grouping: { deep: true, observable: false }
});
现在,您可以使用其他配置选项,只要您认为合适HERE即可。我只提到该grouping
选项是因为如果您希望您的对象(可能是嵌套/分层的)递归遍历并识别其中的所有对象都是有效的,这一点至关重要。
然后我通常使用以下方法来验证我的模型 - 我利用这样的分组功能:
var myModel = {
Id: 0,
FirstName: ko.observable('').extend({ required: true }),
LastName: ko.observable('').extend({ required: true }),
DateOfBirth: ko.observable('').extend({ date: true }),
Errors: ko.validation.group(this),
isValid: ko.computed(function() {
return this.Errors.length == 0;
});
};
或使用功能声明方法:
function myModel() {
var self = this;
self.Id = 0;
self.FirstName = ko.observable('').extend({ required: true });
self.LastName = ko.observable('').extend({ required: true });
self.DateOfBirth = ko.observable('').extend({ date: true });
self.Errors = ko.validation.group(self);
self.isValid = ko.computed(function() {
return this.Errors.length == 0;
});
};
ko.validation.group(obj)
是这种方法的关键。该函数将递归遍历传入的对象并识别其中的每个可验证对象。然后它将它们包装成一个validatedObservable,结果是一个observableArray,其中填充了任何验证失败的验证器生成的错误消息。
所以现在我们可以像这样编写一个保存函数,按钮接收模型,或者如果您更喜欢在对象本身中定义保存方法,这也可以:
var parentModel = {
Save: function(model) {
if (model.isValid())
//perform save
else {
//do whatever
//forces all error msgs associated to display in UI
model.Errors.showAllMessages();
}
}
};
确保在调用ko.applyBindings(model)
之后执行,ko.validation.init()
并且您的模型已准备好验证器
希望这能给你一些帮助你开始的东西!当我第一次开始使用这个插件时,这是一个让我走上正轨的综合示例。