【问题标题】:How to remove extender from an existing observable?如何从现有的 observable 中删除扩展器?
【发布时间】:2013-06-11 19:22:09
【问题描述】:

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

myObservable.extend({required:true});

我可以在添加后删除扩展程序吗?

【问题讨论】:

    标签: knockout.js knockout-validation knockout-extensions


    【解决方案1】:

    您可以从可观察对象中删除所有与验证相关的属性,这些属性是通过调用 ko 验证添加的:

    myObservable.extend({validatable: false});
    

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

    myObservable.rules.remove(function (item) {
            return item.rule == "required";
        });
    }
    

    演示JSFiddle.

    但是 ko 验证支持 conditional validation,因此您可以指定一些条件何时验证应该起作用,所以也许这就是您需要的:

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

    【讨论】:

    • the onlyIf 正是我所需要的,但是我问的关于删除扩展器的问题怎么样?淘汰赛支持吗?
    • 不,您不能删除扩展器,除非扩展器本身提供了一种“恢复”其自身更改的方法。在 ko 验证的情况下,myObservable.extend({validatable: false}); 调用正是这样做的,它删除了由.extend({required:true}); 或任何其他规则添加的所有与验证相关的内容。
    【解决方案2】:

    nemesv 答案可以修正一个小的错字 - remove(...) 调用中的函数应该返回一个布尔值(即 '==' 而不是 '='):

    myObservable.rules.remove(function(item) {
      return item.rule == "required";
    });
    

    演示:JSFiddle

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多