1


我尝试使用 KnockoutJs验证插件,但我遇到了问题。在从输入发布数据之前,我验证值,如果它正确,我发布它并将我的视图模型重置为默认状态,如果值不正确,我通过添加一些 css 类将输入包装到红色边框中(或添加错误消息)。问题是这只工作一次:在发布数据后我将我的视图模型重置为默认状态(正如我之前所说),输入字段变为空,如果我尝试发布这个空数据,验证有效,但 css 类没有t 应用(不出现错误消息)。请尝试我的小提琴示例,有什么问题?

* [更新]。

所以,我找到了解决方法:只需向 data-bind 属性添加额外的代码

validationElement: itemToAdd().Name

它应该是

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

它有效,但看起来很糟糕。无论如何,如果有人可以修复我以前的代码,那就太好了。

4

2 回答 2

0

我整理了一个小提琴来举例说明我的答案。

解决此问题的一种方法是让您的activeAccount对象有一个属性,我称之为 mine 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其设置为 a来“重置”。new activeAccount({})

于 2013-04-09T15:28:16.753 回答
0

只是改变

var t = ko.validation.group(viewModel.itemToAdd())

var t = ko.validation.group(viewModel.itemToAdd)
于 2012-08-13T09:59:26.597 回答