Knockout Validation of two interdependent fields

匿名 (未验证) 提交于 2019-12-03 00:52:01

问题:

Consider the following piece of code -

var MyObjectModel = function(myObject){ var self = this; self.myNumber1 = ko.observable(myObject.number1).trimmed(); self.myNumber2 = ko.observable(myObject.number2).trimmed(); 

I would like to extend myNumber1 and myNumber2, to add knockout validations such that it throws an error if both are empty, and stays fine if either has a value.

Any idea how I could go about achieving this ?

回答1:

You can use an ko.computed to create a function which checks if at least any of both fields is set and onlyIf in the validation to execute the validation conditionally.

var MyObjectModel = function (myObject) {     var self = this;     self.myNumber1 = ko.observable(myObject.number1);     self.myNumber2 = ko.observable(myObject.number2);      self.numbersHaveNoValue = ko.computed(function () {         var value1 = self.myNumber1(), value2 = self.myNumber2();         return !ko.validation.rules.required.validator(value1, true) &&                !ko.validation.rules.required.validator(value2, true);     });      self.myNumber1.extend({ required: { onlyIf: self.numbersHaveNoValue }});     self.myNumber2.extend({ required: { onlyIf: self.numbersHaveNoValue }}); } 

I have created a fiddle: http://jsfiddle.net/delixfe/aBytt/



回答2:

var MyObjectModel = function(myObject) {     var self = this;     self.myNumber1 = ko.observable(myObject.number1).trimmed();     self.myNumber2 = ko.observable(myObject.number2).trimmed();      self.numberCount = ko.computed(function() {         var count = 0;         count += self.myNumber1() != '' ? 1 : 0;         count += self.myNumber2() != '' ? 1 : 0;         return count;     }).extend({min:1}); } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!