【问题标题】:Conditional validation not working for anonymous Knockout validation rule条件验证不适用于匿名敲除验证规则
【发布时间】:2013-01-14 02:51:09
【问题描述】:

我的视图模型中有以下使用淘汰赛验证的属性,其中之一是自定义验证以检查密码匹配。

model.Password = ko.observable()
                  .extend({ required: { message: "Password is required.", 
                        params: true,
                        onlyIf: function () { return model.IsCredentialsRequired(); }}
                    });


model.ConfirmPassword = ko.observable().
                        extend({ validation: { validator: mustEqual,
                        message: 'Passwords do not match.',
                        params: model.Password,               
                        onlyIf: function () { return model.IsCredentialsRequired(); } }
                    });

自定义验证函数代码

var mustEqual = function (val, other) {
                return val == other();
            };

我发现OnlyIf 条件对model.Password 工作正常,具体取决于model.IsCredentialsRequired(),但它不适用于model.ConfirmPassword,有人可以帮我解释为什么会这样吗?还有其他方法可以使用吗?自定义规则的条件验证?

提前致谢

【问题讨论】:

  • 我仍然试图理解为什么你的代码不起作用。 model.IsCredentialsRequired 是可订阅的(可观察的还是计算的)?
  • 对,model.IsCredentialsRequired 已计算

标签: knockout.js knockout-validation


【解决方案1】:

knockout-validation 目前不支持匿名规则的“onlyIf”。但它支持自定义规则。因此,您可以创建自定义规则并使用 onlyIf:

ko.validation.rules['confirmPasswordMatches'] = {
    validator: function (val, params) {
        var otherValue = params;
        return val === ko.validation.utils.getValue(otherValue);
    },
    message: 'Passwords do not match.',
};
ko.validation.registerExtenders();

function ViewModel() {
    var self = this;

    self.IsCredentialsRequired = ko.observable(true);

    self.Password = ko.observable()
        .extend({
            required: {
                message: "Password is required.",
                params: true,
                onlyIf: self.IsCredentialsRequired
            }
    });

    self.ConfirmPassword = ko.observable().
    extend({
            confirmPasswordMatches: {
            params: self.Password,
            onlyIf: self.IsCredentialsRequired
        }
    });

}

小提琴:http://jsfiddle.net/delixfe/mFAEx/

【讨论】:

  • 这行得通,但如果我想要一个自定义规则,我也想在这种情况下得到答案
  • 我已经更新了答案。简而言之:淘汰验证不支持 onlyIf 用于匿名规则。但它适用于自定义的。
猜你喜欢
  • 2015-08-03
  • 2016-06-08
  • 2012-12-16
  • 2013-05-23
  • 2015-04-19
  • 1970-01-01
  • 2014-08-11
  • 2013-01-13
  • 2011-10-28
相关资源
最近更新 更多