Ich verwende Durandal, die wiederum von Knockout profitiert.Knockout-Validierung: Dynamische Einschränkungen
Ich möchte Änderungsprüfung können Längen dynamisch
Die Geige etwas anders zu sein scheint zu verhalten, als meine „Arbeit“ Lösung, aber es ist noch nicht zu tun was ich will/erwarte es.
Ansichtsmodell JS:
[Versuch 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;
});
Was passiert zu sein scheint, ist, dass, wenn ich die Eingabe starten ich die max & min Validierung von 13, aber wenn i fahre fort, die Validierungsänderungen auf 15 zu tippen. Ich habe einen anderen Weg ausprobiert, indem ich die minimale Länge in der ersten beobachtbaren Ausdehnung EG, direkt nach der Regex, und dann die Min- und Max-Länge gesetzt habe, um eine Observable zu verwenden Erfolg.
[Versuch 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)
}
});
Können Sie http://cdnjs.com/ zu Nimm das Knockout-Validierungs-Plugin ... – nemesv
Fertig. +1 Ps sehr coole Seite. Lesezeichen für sicher :) –