淘汰验证&正确的方法来清除控件

时间:2013-01-10 03:25:59

标签: asp.net-mvc-3 knockout.js knockout-validation

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

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

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

我在knockout viewmodel中添加了方法

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)之后。错误立即出现!我希望错误仅在他们按下按钮后才显示,即使在清除了属性后

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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__
    }
);