Knockout Validation禁用验证

Hom*_*mer 10 knockout.js knockout-validation

我有ko.observableArrays和项目验证.用户可以将项目标记为已删除.当它被标记为已删除时,我需要禁用该项目的验证.

你如何动态禁用验证?

示例:http://jsfiddle.net/3RZjT/2/

<div data-bind="foreach: names">
    <input data-bind="value: name, valueUpdate: 'afterkeydown'" /> <a data-bind="click: deleteMe, text:deleted()?'undelete':'delete'" href="#">delete</a><br/>
</div>

function Person(name){
    var self = this;
    self.name = ko.observable(name).extend({ required: true});
    self.deleted = ko.observable(false);
    self.deleteMe = function(){ 
        self.deleted(!self.deleted());
        self.deleted.extend({ validatable: !self.deleted()});
    };
}

var viewModel = {
    names: ko.observableArray([new Person("Ken"), new Person("")])
};

ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)

And*_*ers 11

更新 旧答案对于验证的Knockout-Contrib版本无效(这是具有活动开发的分支)

https://github.com/Knockout-Contrib/Knockout-Validation

使用onlyIf选项

this.enable = ko.observable(true);
this.required = ko.observable().extend({ required: { onlyIf: this.enable } });
Run Code Online (Sandbox Code Playgroud)

老答案

尝试

this.property.extend({ validatable: false }); // disables all validation for property
Run Code Online (Sandbox Code Playgroud)

要么

this.property.extend({ required: false }); // disables required validation for property
Run Code Online (Sandbox Code Playgroud)

  • 我将此标记为答案,因为它是"如何动态禁用验证?"这一问题的答案.但是,出于我的目的,我还需要能够重新启用验证.查看源代码,看起来`validatable:false/true`不支持启用/禁用.当您使用`.extend({validatable:false})`时,它会删除所有验证规则.那时没有什么可以重新启用. (2认同)