我正在使用 Knockout,项目 Knockout-Validation 似乎是添加验证的好方法,但我无法让它工作。
有人知道上面写过什么好文章吗?
这些示例有点令人困惑,例如,包含可观察对象的主要对象是否必须是已验证的可观察对象,如果不是,您如何验证这些东西。然后在配置示例中有一行说 ko.applyBindingsWithValidation 但在其他任何地方都没有提到。
我真正想做的是有一个在可观察数组上执行 foreach 的视图。然后每个项目都有自己的保存按钮,并且需要验证。
谢谢
我正在使用 Knockout,项目 Knockout-Validation 似乎是添加验证的好方法,但我无法让它工作。
有人知道上面写过什么好文章吗?
这些示例有点令人困惑,例如,包含可观察对象的主要对象是否必须是已验证的可观察对象,如果不是,您如何验证这些东西。然后在配置示例中有一行说 ko.applyBindingsWithValidation 但在其他任何地方都没有提到。
我真正想做的是有一个在可观察数组上执行 foreach 的视图。然后每个项目都有自己的保存按钮,并且需要验证。
谢谢
这是实现目标的简单方法:
首先设置验证配置并使用此 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()并且您的模型已准备好验证器
希望这能给你一些帮助你开始的东西!当我第一次开始使用这个插件时,这是一个让我走上正轨的综合示例。