我有一张表格:
并实施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));
以下是工作示例:http://jsfiddle.net/8Hude/3/
任何线索为什么它不能正常工作?
感谢。
答案 0 :(得分:0)
如上所述,验证插件将是最优雅,更少创新的解决方案。
编辑:使用验证插件的评论实施后
除此之外,你还有几个选择。
如果您确信联系对象将始终只包含必填字段,那么不太强大的实现将迭代联系人的属性,确保每个都具有一定的价值。
稍微强一点,但仍然缺乏插件的优雅,实现将是维护一系列必需字段并使用该数组进行验证。您可以参考我的示例进行此设置。实质上,每个必需属性都映射到observables。对任何可观察属性的值所做的更改会触发(通过订阅)对计算中使用的虚拟可观察对象的突变调用。这是必需的,因为计算机不能调用valueHasMutated。变异调用触发计算重新评估,从而更新UI。