我怎样才能使将无效项目添加到可观察数组以使已验证的可观察对象失效,并带有挖空验证



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

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

以下是我正在处理的问题的示例:http://jsfiddle.net/97Lr15zq/5/

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);

如何获得挖空验证,以便在添加新列表项后立即开始监视它们?

这并不理想,我仍然希望找到一个更干净的解决方案,但现在我最终所做的是向 viewModel 添加一个可观察量和 validatedObservable,其唯一目的是无效,以便 KNOCKOUT 验证将开始获取新列表项中的更改。

http://jsfiddle.net/97Lr15zq/6/

var viewModel = { items: ko.observableArray([]), test: ko.observable('e').extend({ required: true }), invalidator: ko.observable('a').extend({ required: true }), add: function(){ viewModel.items.push({ firstName: ko.observable('').extend({ required: true }), lastName: ko.observable('').extend({ required: true }) }); viewModel.invalidator(''); viewModel.invalidator('a'); }, 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, invalidator: viewModel.invalidator });

最新更新