如何使用 Knockout-Validation 将无效项目添加到 observableArray 以使 validObservable 无效
Posted
技术标签:
【中文标题】如何使用 Knockout-Validation 将无效项目添加到 observableArray 以使 validObservable 无效【英文标题】:How can I cause adding an invalid item to an observableArray to invalidate the validatedObservable with Knockout-Validation 【发布时间】:2020-03-19 01:09:17 【问题描述】:我有一个表单,其中包含一些字段和用户可以添加的项目列表。要使表单有效,表单上的所有字段以及列表的所有项目中的所有字段都必须有效。当新项目添加到列表中时,它将无效,因为所有必填字段都将为空白。
不幸的是,淘汰赛验证似乎没有看到这一点,并将表单报告为有效。列表项中的各个字段将独立验证并显示“此字段为必填项”。消息,但包含所有内容的 validateObservable 将 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);
如何获得淘汰验证以在添加新列表项后立即开始监控它们?
【问题讨论】:
【参考方案1】:这并不理想,我仍然希望找到一个更清洁的解决方案,但现在我最终做的是向 viewModel 和 validObservable 添加一个 observable,其唯一目的是使其失效,以便淘汰验证将开始获取新列表项中的更改。
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( 项目:viewModel.items, 测试:viewModel.test, invalidator:viewModel.invalidator );
【讨论】:
以上是关于如何使用 Knockout-Validation 将无效项目添加到 observableArray 以使 validObservable 无效的主要内容,如果未能解决你的问题,请参考以下文章