我找不到任何解决方案,所以这是我的问题:
我已经为小型表单设置了验证,您可以在其中添加项目(observableArray,以后实际保存到DB)。
验证适用于第一项并显示验证消息,但第二次验证消息不会显示(验证本身有效,您无法添加项目)。
这就是我的所作所为:
在newSchool对象中设置验证,例如
self.City = ko.observable(item ? item.City : '').extend(
{
required: true
});
在MainViewModel中构建验证组
self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true });
:检查错误,否则推入集合,使用新的默认值初始化newSchool observable
self.addSchool = function () {
if (self.schoolErrors().length > 0) {
self.schoolErrors.showAllMessages();
return;
}
self.schools.push(self.newSchool());
self.newSchool(new School());
self.newSchool().load();
self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true }); };
出于调试原因,我打印出了学校对象中经验证的observable的isValid和isModified值。这些看起来很好。插入第一个项目后,isValid和isModified都返回 false 。
只有问题,如上所述,不再显示任何验证消息。
对我来说也很奇怪:我不使用自定义验证消息模板,除了一种情况,我需要针对计算字段进行验证。这显示了,但“内置”验证消息没有。
任何想法?
答案 0 :(得分:2)
如果只是在敲除验证中添加了一个pull请求,它修复了knockout.validation.group对可观察数组中的更改没有反应的问题。
https://github.com/Knockout-Contrib/Knockout-Validation/pull/223
答案 1 :(得分:0)
遗憾的是,插入新项目时,不会重新评估该组。订阅数组并明确地执行。
this.items.subscribe(function() {
this.errors = ko.validation.group(this);
this.errors.showAllMessages();
}, this);
在小提琴中,我使用Github作为CDN,所以如果小提琴不起作用等待和重新加载。