Javascript 使用敲除验证来验证集合中的可观察项

Javascript 使用敲除验证来验证集合中的可观察项,javascript,knockout.js,knockout-validation,Javascript,Knockout.js,Knockout Validation,我有一个消息字段和人的集合被绑定在一个无序列表中,每个人都有一个颜色下拉列表和一个默认选择 消息字段上的验证有效,删除文本并显示错误,错误计数增加。但是,当您将其中一个下拉项更改为“Choose..”(有效地取消选择该选项)时,您会正确地收到一条“this field is required”(此字段是必需的)消息,但是errors对象似乎没有更新。这显然与它是一个收藏品有关?当您按下submit按钮或查看span数据绑定时,了解我的意思 我还需要验证来启动动态添加的行,因此当您按下“添加另一行

我有一个消息字段和
人的集合
被绑定在一个无序列表中,每个人都有一个颜色下拉列表和一个默认选择

消息字段上的验证有效,删除文本并显示错误,错误计数增加。但是,当您将其中一个下拉项更改为“Choose..”(有效地取消选择该选项)时,您会正确地收到一条“this field is required”(此字段是必需的)消息,但是
errors
对象似乎没有更新。这显然与它是一个收藏品有关?当您按下submit按钮或查看span数据绑定时,了解我的意思

我还需要验证来启动动态添加的行,因此当您按下“添加另一行”时,我也需要增加错误对象

有人能看看这个并帮我解决吗?

更新: 有了最新版本的验证库,您可以使用live:true选项让它收听observableArrays

grouping: { deep: true, observable: true, live: true }

旧答案:

遗憾的是,当插入新项目时,该组没有得到重新评估。订阅数组并显式执行

this.items.subscribe(function() {
     this.errors = ko.validation.group(this);
     this.errors.showAllMessages();
}, this);

更新: 有了最新版本的验证库,您可以使用live:true选项让它收听observableArrays

grouping: { deep: true, observable: true, live: true }

旧答案:

遗憾的是,当插入新项目时,该组没有得到重新评估。订阅数组并显式执行

this.items.subscribe(function() {
     this.errors = ko.validation.group(this);
     this.errors.showAllMessages();
}, this);

实际上,只添加这一行
ko.validation.init({grouping:{deep:true}})完全修复了我的所有问题,并允许重新评估新项目。如果我使用您也指定的
observable:true
部分,则它没有使用。我要告诉你一点:)@Anders当组中的每个项目发生变化时,我如何强制组重新评估,而不必在每次数组项目发生变化时重新初始化它?谢谢!实际上,只添加这一行
ko.validation.init({grouping:{deep:true}})完全修复了我的所有问题,并允许重新评估新项目。如果我使用您也指定的
observable:true
部分,则它没有使用。我要告诉你一点:)@Anders当组中的每个项目发生变化时,我如何强制组重新评估,而不必在每次数组项目发生变化时重新初始化它?谢谢!