2

我有以下代码,它工作正常,除非您在插入项目后清除属性。错误立即出现。

ko.validation.configure({
        insertMessages: false,
        decorateElement: true,
        errorElementClass: 'error'
    });

FirstName: ko.observable().extend({
            required: true
        }),

我在淘汰视图模型中添加了方法

addItem: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                //DO SOMETHING
                this.SomeCollection.push(newInterviewee);
                this.FirstName(null);
                }
        },

我在 HTML 中有以下内容:

<div>
<label>First Name</label>
<input data-bind="value: FirstName, validationElement: FirstName, valueUpdate: 'keyup'" class="input" type="text">
</div>
<div>
<div>
<input data-bind="click: addItem" class="button" type="button">
</div>

问题是在我调用 this.FirstName(null) 之后。错误立即出现!我希望只有在他们按下按钮时才会显示错误,即使在属性被清除后也是如此

4

2 回答 2

4

这是 Steve Greatrex 提供的解决方案:https ://github.com/Knockout-Contrib/Knockout-Validation/issues/210

于 2013-01-11T16:19:25.137 回答
0

我们的项目也有同样的问题。我们通过强制 isValid 为 true 解决了这个问题。

addItem: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                //DO SOMETHING
                this.SomeCollection.push(newInterviewee);
                this.FirstName(null);
                viewModel.isValid(true);
            }
        },

为了能够做到这一点,您需要覆盖 ko.validation 对 isValid 计算的定义,如下所示:

observable.isValid = ko.computed({
    read: function() {
        return observable.__valid__();
    },
        write: observable.__valid__
    }
);
于 2013-01-10T09:26:16.253 回答