2016-06-27 5 views
2

Wenn ich einen Knockout zu beobachten, wie soMultiple „Muster“ Validierung Extender mit Knockout

var x = ko.observable(). 
extend({ 
    pattern : { 
     params: someRegex, 
     message: "An error" 
    } 
}) 
.extend({ 
    pattern : { 
     params: someMoreRegex, 
     message: "Another error" 
    } 
}) 

Ist dies eine gültige Erweiterung für einen Knockout zu beobachten (das heißt mehrere Muster-Erweiterungen) verlängern?

Die Regex für das zweite Muster wird überhaupt nicht validiert. In einigen Fällen wird es ausgelöst, zeigt aber die erste Fehlermeldung an. Ich habe vor kurzem Version 1.0.2 auf 2.0.3 Knockout-Validierung aktualisiert und das ist seit dem gebrochen, aber kann nicht scheinen, einen Finger darauf zu setzen, warum das nicht mehr funktioniert.

Antwort

4

Von this (admitedly, ziemlich alt) Github Frage, folgerte ich, dass dies nicht durch die Validierungs Bibliothek unterstützt wird ...

Eine schnelle Lösung könnte sein, anonyme benutzerdefinierte Regeln zu erstellen, die die validator Methode borgen aus die pattern Erweiterung.

Ein Beispiel (das keinen Sinn macht, zeigt aber, wie Sie zwei Muster mit ihren eigenen Fehlern kombinieren):

this.name = ko.observable("").extend({ 
    validation: [{ 
     validator: ko.validation.rules['pattern'].validator, 
     message: "Must be lowercase", 
     params: /^[a-z]+$/ 
    }, { 
     validator: ko.validation.rules['pattern'].validator, 
     message: "Must be uppercase", 
     params: /^[A-Z]+$/ 
    } 
    ] 
}); 

Sie vielleicht diesen Code auf ein wenig Methode durch die Schaffung einer Fabrik reinigen können, dass gibt die erforderlichen Objekte zurück oder erstellt eine benutzerdefinierte Regel, die ein Array von regulären Ausdrücken und ein Array von Fehlermeldungen verwendet.

+0

Funktioniert mit ko.validation 1.0.2 einfach nicht 2.0.3 ... Versucht mit beiden bearbeitet 1. muss in späteren Versionen nicht mehr unterstützt werden – Sim

+0

Seltsam, weil der Beitrag, den ich verlinkt mit Daten aus der Version 1.0.2. .. Wenn du sicher bist, dass es vorher unterstützt wurde und nicht mehr ist, und es so sein sollte, würde ich vorschlagen, den Code durchzugehen oder die Quelle auf GitHub zu studieren. Wenn Sie sich sowohl mit einem funktionierenden als auch mit einem nicht funktionierenden Beispiel (in einer Geige) verbinden können, könnte Ihnen jemand helfen. Persönlich würde ich akzeptieren, dass das Verschieben einer Hauptversion einige Syntaxänderungen und Codeaktualisierungen erfordert ... – user3297291

Verwandte Themen