我使用的是Durandal,它反過來利用了Knockout。敲除驗證:動態約束
我希望能夠更改驗證動態長度
小提琴似乎表現比我的「工作」的解決方案略有不同,但它仍然沒有做我想要什麼/期待它。
視圖模型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)
}
});
你可以使用http://cdnjs.com/來抓住淘汰賽驗證插件... – nemesv
完成。 +1 Ps非常酷的網站。收藏確認:) –