【问题标题】:Knockout Validation disable validation淘汰赛验证禁用验证
【发布时间】:2012-11-04 04:52:09
【问题描述】:

我有对项目进行验证的 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);

【问题讨论】:

  • 请包含您当前的代码。
  • 我真的没有尝试过,因为我不知道该尝试什么。我已经使用@Anders 答案更新了一个示例,但它对我不起作用。
  • 你应该在你的deleteMe函数中写上self.name.extend({ validatable: !self.deleted()});
  • 该死!哦当然。所以那种工作。看起来此方法将禁用验证,但不会重新启用。 jsfiddle.net/3RZjT/26

标签: knockout.js knockout-validation


【解决方案1】:

更新 旧答案对 Knockout-Contrib 版本的 Validation 无效(那是积极开发的分支)

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

使用 onlyIf 选项,如

this.enable = ko.observable(true);
this.required = ko.observable().extend({ required: { onlyIf: this.enable } });

旧答案

试试

this.property.extend({ validatable: false }); // disables all validation for property

this.property.extend({ required: false }); // disables required validation for property

【讨论】:

  • 它没有用。我已经用一个例子和 jsFiddle 更新了我的问题。
  • 提交工单,它应该可以工作github.com/ericmbarnard/Knockout-Validation/issues/101
  • 我将此标记为答案,因为它是“如何动态禁用验证?”问题的答案。但是,出于我的目的,我还需要能够重新启用验证。查看源代码,validatable: false/true 似乎不支持启用/禁用。当您使用.extend({ validatable: false }) 时,它会删除所有验证规则。那时没有什么可以重新启用的。
  • 我发现了一个添加启用/禁用功能的拉取请求:github.com/ericmbarnard/Knockout-Validation/pull/127
  • 使用onlyIf 不是一个好的解决方案,因为它必须应用于可观察对象的每个验证规则。当您可以选择为整个可观察对象打开/关闭开关时,为什么要使用此冗余代码?如果您需要重新启用它们,请使用validatable: false 并使用函数来注册扩展。人们的行为就像onlyIf 是很多事情的最终解决方案,并不是因为它不能应用于整个可观察对象本身,而是因为至少可以说是糟糕的设计的个别规则。
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 2011-08-09
  • 2015-02-03
  • 2017-01-27
  • 1970-01-01
  • 2012-12-05
  • 2012-03-08
  • 1970-01-01
相关资源
最近更新 更多