我有一个KnockoutJS应用,要求用户输入他们的实际地址。默认情况下,我们提供的地图映射到我们主要经营所在国家/地区的地址组成部分 - 具体而言,我们需要美国的城市,州和ZIP。这些字段以及“地址”字段是必需的。这是美国地址的典型表述。
但我们还有一个复选框,允许他们输入任何国家/地区的地址。如果他们检查该框,我们将摆脱城市,州和ZIP框,并用“国家/地区”框替换这些字段。因此,它们具有“地址”和“国家”框,两者都是必需的。城市,州和ZIP是隐藏的,不应该被要求。
我无法弄清楚如何为此设置验证。基本上,我们不知道在运行时,当用户指示他们是否有美国或非美国地址时,将需要哪些字段。
如何使用Knockout Validation完成此操作?
答案 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。