【问题标题】:How can I cause adding an invalid item to an observableArray to invalidate the validatedObservable with Knockout-Validation如何使用 Knockout-Validation 将无效项目添加到 observableArray 以使 validObservable 无效
【发布时间】: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);

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

【问题讨论】:

    标签: validation knockout.js knockout-validation


    【解决方案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 });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多