私はDurandalを使用しています.DurandalはKnockoutを活用しています。ノックアウト検証:動的制約
私は変更の検証の長さにできるようにしたい動的
フィドルは、私の「作業」ソリューションよりもわずかに異なる挙動をしているようだが、そのはまだやっていません私が望んでいる/期待していること。
のViewModel 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のちょうど&の最大長を、正規表現の直後に設定してから、観察可能なものを使用するために最小値と最大長を設定する 成功。
私はcustom validation機能を利用した、より具体的に文句を言わない再利用することがこのよう single use custom validation:
は[試み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)
}
});
はあなたにhttp://cdnjs.com/を使用できます(つまり、どのように計算されていますので、ここではそれはの関数として
countryCode()
を呼び出すために大丈夫だ仕事)の場所で計算され、観察を定義することができますノックアウト検証プラグインを取得... – nemesv完了。 +1 Ps非常にクールなサイト。ブックマークは確かに:) –