在运行时才知道验证规则时使用Knockout Validation

时间:2013-05-28 20:47:13

标签: knockout.js knockout-validation

我有一个KnockoutJS应用,要求用户输入他们的实际地址。默认情况下,我们提供的地图映射到我们主要经营所在国家/地区的地址组成部分 - 具体而言,我们需要美国的城市,州和ZIP。这些字段以及“地址”字段是必需的。这是美国地址的典型表述。

但我们还有一个复选框,允许他们输入任何国家/地区的地址。如果他们检查该框,我们将摆脱城市,州和ZIP框,并用“国家/地区”框替换这些字段。因此,它们具有“地址”和“国家”框,两者都是必需的。城市,州和ZIP是隐藏的,不应该被要求。

我无法弄清楚如何为此设置验证。基本上,我们不知道在运行时,当用户指示他们是否有美国或非美国地址时,将需要哪些字段。

如何使用Knockout Validation完成此操作?

1 个答案:

答案 0 :(得分:0)

验证规则的onlyIf构造可能会有所帮助。例如,postal codes are not required in Ireland,因此您可能有这样的ViewModel:

var viewModel = {
    availableCountries : ko.observableArray(["United States", "Canada", "Ireland"]),
    country : ko.observable("United States")
};

viewModel.zip = ko.observable("").extend({ required: { onlyIf: function() { return viewModel.country() !== "Ireland"; }  }});
viewModel.errors = ko.validation.group(viewModel);

在这种情况下,任何绑定到input观察点的zip只会被美国和加拿大所需,但不会被爱尔兰所需。有关上述内容的演示,请参阅this fiddle