我正在使用Knockout和project Knockout-Validation 似乎是添加验证的好方法,但我无法让它工作。
有没有人知道任何写在上面的好文章?
这些示例有点令人困惑,例如,包含observable的主对象是否必须是validatedObservable,如果不是,您如何验证这些内容。然后在配置示例中有一行说ko.applyBindingsWithValidation但在其他地方没有提到。
我真正想做的是拥有一个可观察数组的视图。然后每个项目都有自己的保存按钮,需要验证。
由于
答案 0 :(得分:1)
这是实现目标的简单方法:
首先设置验证配置并使用此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,其中填充了验证失败的任何验证器生成的错误消息。
所以现在我们可以编写一个这样的保存函数,其中按钮接收模型,或者如果您更喜欢在对象本身中定义save方法,那也可以:
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()
希望这能为您提供一些帮助您入门的东西!这是一个comprehensive example,当我第一次开始使用这个插件时,它让我走上正轨。
答案 1 :(得分:0)