私はデュランダルを使用しています。デュランダルは、ノックアウトを活用しています。
検証の長さを動的に変更できるようにしたい
フィドルは私の「動作中の」ソリューションとは少し異なる動作をしているようですが、それでも私が望んでいること/期待していることをしていません。
ビューモデル JS:
【試み1】
define(function () {
var self = this;
self.userInfo = {
IdOrPassportNumber: ko.observable().extend({
required: true,
pattern: {
message: 'A message',
params: /some regex/
}
}),
IdType: ko.observable()
},
self.isIdValid = ko.validatedObservable({
IdOrPassportNumber: self.userInfo.IdOrPassportNumber
});
self.userInfo.IdOrPassportNumber.subscribe(function (value) {
if (isIdValid.isValid()) {
console.log('YOLO!');
}
});
self.userInfo.IdType.subscribe(function (value) {
console.log(value);
if (value === 'Passport') {
self.userInfo.IdOrPassportNumber.extend({ maxLength: 15 });
} else {
self.userInfo.IdOrPassportNumber.extend({ maxLength: 13 });
}
});
var viewModel = {
userInfo: self.userInfo
};
viewModel["errors"] = ko.validation.group(viewModel.userInfo);
viewModel["errors"].showAllMessages();
return viewModel;
});
起こっているように見えるのは、入力を開始すると最大と最小の検証が13になるが、入力を続けると検証が15に変わるということです。別のルートを試し、最初の観測可能な拡張で最小と最大の長さを設定しましたEG、正規表現の直後に、オブザーバブルを使用するように最小長と最大長を設定すると、成功しません。
【試み2】
self.userInfo = {
IdOrPassportNumber: ko.observable().extend({
maxLength: self.maxLength(),
minlength: self.maxLength()
}),
IdType: ko.observable()
},
self.maxLength = ko.observable();
self.userInfo.IdType.subscribe(function (value) {
if (value === 'Passport') {
self.maxLength(15)
} else {
self.maxLength(3)
}
});