Json KnockoutJS表单验证始终返回有效的

Json KnockoutJS表单验证始终返回有效的,json,knockout.js,knockout-validation,Json,Knockout.js,Knockout Validation,我有一张表格: 并实现KnockoutJS验证。所有内容都是按照文档进行应用的,但它总是返回有效的内容,即使我保留了空字段,等等 代码如下: ko.validation.rules.pattern.message = 'Invalid.'; ko.validation.configure({ registerExtenders: true, messagesOnModified: true, insertMessages: true, parseInputAtt

我有一张表格:

并实现KnockoutJS验证。所有内容都是按照文档进行应用的,但它总是返回有效的内容,即使我保留了空字段,等等

代码如下:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

var initialData = [
    { firstName: "John", fathersLast: "Smith", country : ""
    }
];

var Contact = function (contact) {
            var self = this;
            self.firstName = ko.observable(contact.firstName ).extend({ required: true,  message: '* required'  });;
            self.fathersLast = ko.observable(contact.fathersLast ).extend({ required: true, message: '* required'  });;
    self.country = ko.observable(contact.country ).extend({ required: true, minLength: 2, message: '* required'  });
        };

var ContactsModel = function(contacts) {
    var self = this;

    self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function(i) {
        return new Contact(i);
    }));


    self.errors = ko.validation.group(self.contacts);

    self.addContact = function() {

        if (self.errors().length == 0) {
            alert('Thank you.');
        } else {
            alert('Please check your submission.');
            self.errors.showAllMessages();
        }

        self.contacts.push({
            firstName: "",
            fathersLast: "",
            country: ""
        });
    };

    self.removeContact = function(contact) {
        self.contacts.remove(contact);
    };
};

ko.applyBindings(new ContactsModel(initialData));
以下是工作示例:

有没有线索说明它为什么不能正常工作


谢谢。

如前所述,验证插件将是最优雅、更少重复发明的解决方案

编辑:使用验证插件实现评论后

除此之外,你还有几个选择

如果您确信contact对象总是只包含必需的字段,那么一个不太健壮的实现就是迭代contact的属性,确保每个属性都有一些值


更健壮一点,但仍然缺乏插件的优雅,实现将是维护一个必需字段数组,并使用该数组进行验证。对于此设置,您可以参考我的示例。本质上,每个必需的属性都映射到可观察对象。对任何可观察属性的值所做的更改都会通过订阅触发一个用于计算属性的虚拟可观察属性的变异调用。这是必需的,因为计算值不能调用valueHasMutated。突变调用触发计算机重新评估,从而更新用户界面。

您是如何实现验证的?你指的是什么医生?我只是让它工作。。。但是添加的新元素没有得到验证。。也许我需要订阅他们的验证,但我不知道如何。我认为这个问题在关于这一执行的问题中得到了解决。