KnockoutJS Validation插件不显示错误消息

时间:2012-08-13 08:00:41

标签: knockout.js knockout-validation


我尝试使用KnockoutJs validation plugin,我遇到了问题。在从输入发布数据之前我验证了值,如果它是正确的我发布它并将我的viewmodel重置为默认状态,如果值不正确我通过添加一些css类将输入包装到红色边框(或添加错误消息) )。问题是这只能工作一次:在发布数据后我将我的viewmodel重置为默认状态(如前所述),输入字段变空,如果我尝试发布这个空数据,验证工作,但css类没有t apply(不显示错误消息)。请试试我的Fiddle example,出了什么问题?

* [更新]。

因此,我找到了解决方法:只需将其他代码添加到数据绑定属性

validationElement: itemToAdd().Name

应该是

<input data-bind='value: itemToAdd().Name, validationElement: itemToAdd().Name' />

它有效,但看起来很糟糕。无论如何,如果有人可以修复我之前的代码,那将是件好事。

2 个答案:

答案 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({})到构造函数。