2012-10-23 4 views
29

Ich versuche, knockout.validation Plugin zu verwenden. Ich habe einen exampleViewModel:Wie ko.validation.group Funktion verwenden

function exampleViewModel() { 
    this.P1 = ko.observable().extend({ required : true }); 
    this.P2 = ko.observable().extend({ required : true }); 
    this.P3 = ko.observable().extend({ required : true }); 
    this.P4 = ko.observable().extend({ required : true }); 

    this.errors = ko.validation.group(this); 
}  

In dem obigen Ansicht Modell i einer Validierungsgruppe mit dem Namen Fehler für das aktuelle Objekt erstellt. Wenn eine Validierungsregel für eine der folgenden Eigenschaften fehlschlägt, enthält diese Fehlereigenschaft eine Fehlernachricht.

My question is, wenn ich eine Validierungsgruppe von nur 3 Eigenschaften erstellen möchte (P1, P2, P3) von 4 als wie kann ich das tun?

Antwort

53

Das hat gut für mich funktioniert. Erstellen Sie anstelle der Gruppierung unter this ein Proxyobjekt, das die Eigenschaften enthält, die Sie validieren möchten.

this.errors = ko.validation.group({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

Wenn Sie dies tun, sollten Sie validatedObservable statt group verwenden. Sie erhalten nicht nur die Fehler, sondern Sie können auch gemeinsam überprüfen, ob alle Eigenschaften mit der Eigenschaft isValid gültig sind.

this.validationModel = ko.validatedObservable({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

// is the validationModel valid? 
this.validationModel.isValid(); 
// what are the error messages? 
this.validationModel.errors(); 
+0

diesen Ansatz Durandal beobachtbare Plugin Validierungsproblem zu debuggen. 'this.errors = ko.validation.group ({P1: beobachtbar (this, 'P1')});' Ich glaube, es hätte die Getter/Setter erkennen und entsprechend reagieren sollen, aber dies hat zumindest bewiesen, dass die Validierung funktioniert. – MrYellow

11

Wie in den documentation die richtige Art und Weise beschrieben, nur bestimmte Observablen zu validieren ist:

this.errors = ko.validation.group([this.P1, this.P2, this.P3]); 
+6

Aus der Dokumentation: > "Beachten Sie auch, dass der erste Parameter kein Array sein muss. Wenn Sie nur ein einzelnes Objekt haben, können Sie es als blankes Objekt übergeben, ohne es in ein Array einzubinden." –

+0

tks für den Dokumentationslink! – Alex

Verwandte Themen