Wie man ko.validation-Fehler mit verwandten Viewmodel-Feldnamen verknüpft

Ich verwende Knockout.Validation und möchte in der Lage sein, eine Fehlerzusammenfassung anzuzeigen, in der in jeder Zeile die Fehlermeldung (offensichtlich!) Sowie der Feldname im zugehörigen Ansichtsmodell angezeigt wird, z.

Alter - Bitte geben Sie eine Zahl einGeburtsdatum - bitte geben Sie ein richtiges Datum ein

Bisher habe ich ein validatedObservable-Objekt, das mein Ansichtsmodell umschließt. Dadurch wird meinem Ansichtsmodell automatisch ein Fehler-Array hinzugefügt, das alle meine Fehler enthält. Ich sehe jedoch keine einfache Möglichkeit, herauszufinden, auf welches Feld sich die einzelnen Fehler beziehen.

Ich weiß, dass ich das Ansichtsmodell selbst durchlaufen und eine eigene Fehlersammlung aus der Eigenschaft isValid erstellen kann. Ist dies jedoch meine einzige Option?

Sobald ich den Feldnamen habe, kann ich meine Validierungszusammenfassung dem entsprechenden "freundlichen" Etikett für dieses Feld zuordnen (z. B. "Geburtsdatum" anstelle von "Geburtsdatum").

Hier ist eine vereinfachte Version des Codes, den ich bisher habe:

ViewModel

function PersonModel(){
   var self = this;
   self.Age = ko.observable().extend({ number: true});

   self.DateOfBirth = ko.observable({ date: true});             
   self.Validate = function() {                           
       if (!self.isValid()) {                                         
          self.errors.showAllMessages();        
          return false;          
       }
       return true;
    };    

ko.validation.init({
                grouping: { deep: true, observable: true },
                registerExtenders: true,
                messagesOnModified: true,
                insertMessages: true
            });

ko.applyBindings(ko.validatedObservable(new PersonModel()));

HTML

<ul data-bind='foreach: model().errors' class="message">
    <li>
           <span data-bind='text:  $data'></span>
    </li>
</ul>

Danke vielmals

Antworten auf die Frage(6)

Ihre Antwort auf die Frage