我尝试使用KnockoutJs validation plugin,我遇到了问题。在从输入发布数据之前我验证了值,如果它是正确的我发布它并将我的viewmodel重置为默认状态,如果值不正确我通过添加一些css类将输入包装到红色边框(或添加错误消息) )。问题是这只能工作一次:在发布数据后我将我的viewmodel重置为默认状态(如前所述),输入字段变空,如果我尝试发布这个空数据,验证工作,但css类没有t apply(不显示错误消息)。请试试我的Fiddle example,出了什么问题?
* [更新]。
因此,我找到了解决方法:只需将其他代码添加到数据绑定属性
validationElement: itemToAdd().Name
应该是
<input data-bind='value: itemToAdd().Name, validationElement: itemToAdd().Name' />
它有效,但看起来很糟糕。无论如何,如果有人可以修复我之前的代码,那将是件好事。
答案 0 :(得分:0)
只需更改
var t = ko.validation.group(viewModel.itemToAdd())
到
var t = ko.validation.group(viewModel.itemToAdd)
答案 1 :(得分:0)
我整理了fiddle例证我的答案。
解决此问题的一种方法是让您的activeAccount
对象拥有一个属性,我称之为errors
,它将保存该对象的所有验证消息。
var activeAccount = function(data) {
this.Id = ko.observable(data.id);
this.Name = ko.observable(data.name).extend({ required: { message: 'Enter account name.'} });
this.UserId = ko.observable(1);
this.errors = ko.validation.group(this);
};
var viewModel = {
items: ko.observableArray([]),
itemToAdd: ko.observable(new activeAccount({})),
createItem: function (item) {
if (item.errors().length == 0) {
viewModel.items.push(item);
viewModel.itemToAdd(new activeAccount({}));
} else {
item.errors.showAllMessages();
}
}
};
保存项目后(无论是发布到服务器,推送到observableArray还是两者),然后通过传递空对象将其设置为itemToAdd
来“重置”new activeAccount({})
到构造函数。