如何使向observableArray添加无效项使validatedObservable with Knockout Validation无效

如何使向observableArray添加无效项使validatedObservable with Knockout Validation无效,validation,knockout.js,knockout-validation,Validation,Knockout.js,Knockout Validation,我有一个表单,其中包含一些字段和用户可以添加的项目列表。要使表单有效,表单上和列表中所有项目中的所有字段都必须有效。当新项目添加到列表中时,它将无效,因为所有必填字段都将为空 不幸的是,敲除验证似乎没有看到这一点,并将表单报告为有效。列表项中的各个字段将独立验证,并显示“此字段是必需的。”消息,但包含所有报告的validatedObservable为true()。更奇怪的是,如果我通过编辑列表添加之前存在的一个字段使表单变得无效,那么突然间一切都开始正常工作 以下是我正在处理的问题的一个示例:

我有一个表单,其中包含一些字段和用户可以添加的项目列表。要使表单有效,表单上和列表中所有项目中的所有字段都必须有效。当新项目添加到列表中时,它将无效,因为所有必填字段都将为空

不幸的是,敲除验证似乎没有看到这一点,并将表单报告为有效。列表项中的各个字段将独立验证,并显示“此字段是必需的。”消息,但包含所有报告的validatedObservable为true()。更奇怪的是,如果我通过编辑列表添加之前存在的一个字段使表单变得无效,那么突然间一切都开始正常工作

以下是我正在处理的问题的一个示例:


如何让淘汰验证在添加新列表项后立即开始监控它们?

这并不理想,我仍然希望找到一个更干净的解决方案,但现在我要做的是在viewModel中添加一个可观察的对象,validatedObservable的唯一目的是使其无效,以便淘汰验证能够进行开始拾取新列表项中的更改

var viewModel={
项目:ko.observableArray([]),
test:ko.observable('e').extend({required:true}),
无效值:ko.observable('a').extend({required:true}),
添加:函数(){
viewModel.items.push({
名字:ko.observable(“”).extend({required:true}),
lastName:ko.observable(“”).extend({required:true})
});
viewModel.invalidater(“”);
viewModel.invalidater('a');
},
提交:函数(){
if(viewModel.errors.isValid()){
警惕(‘谢谢’);
}
否则{
警报('请检查您的提交。错误:'+viewModel.Errors.Errors().length);
viewModel.errors.errors.showAllMessages();
}
}
};

viewModel.errors=ko.validatedObservable({ 项目:viewModel.items, 测试:viewModel.test, 失效者:viewModel.Invalidater });

ko.validation.init({
            registerExtenders: true,
            messagesOnModified: true,
            insertMessages: true,
            parseInputAttributes: true,
            messageTemplate: null,
            grouping: {
                deep: true,
                live: true
            }
        },
        true);


var viewModel = {
    items: ko.observableArray([]),
    test: ko.observable('e').extend({ required: true }),
    add: function(){
        viewModel.items.push({
        firstName: ko.observable('').extend({ required: true }),
        lastName: ko.observable('').extend({ required: true })
      });
    },
    submit: function() {
        if (viewModel.errors.isValid()) {
            alert('Thank you.');
        }
        else {
            alert('Please check your submission. Errors: ' + viewModel.errors.errors().length);
            viewModel.errors.errors.showAllMessages();
        }
    }
};


viewModel.errors = ko.validatedObservable({items: viewModel.items, test: viewModel.test});

ko.applyBindings(viewModel);