如何从现有的observable中删除扩展器?

Jon*_*ski 20 knockout.js knockout-validation knockout-extensions

我正在使用Knockout Validation插件并使用扩展器根据需要设置observable:

myObservable.extend({required:true});
Run Code Online (Sandbox Code Playgroud)

添加后我可以移除扩展器吗?

nem*_*esv 38

您可以从通过ko验证添加的observable中删除所有验证相关属性:

myObservable.extend({validatable: false});
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想删除所需的验证,可以将其从rules集合中删除:

myObservable.rules.remove(function (item) {
        return item.rule == "required";
    });
}
Run Code Online (Sandbox Code Playgroud)

演示JSFiddle.

但是ko验证支持条件验证,所以你可以在验证工作时指定一些条件,所以这可能是你需要的:

myObservable.extend({
    required: {
        message: "Some message",
        onlyIf: function () { return //some condition; }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 不,你不能删除扩展器,除非扩展器本身提供了一种"恢复"自己的更改的方法.在ko验证的情况下,`myObservable.extend({validatable:false});`call正是这样做,它删除了由`.extend({required:true})添加的所有与验证相关的东西;`或任何其他规则. (2认同)