2012-10-23 16 views
29

Sto tentando di utilizzare il plugin knockout.validation. Ho creato un esempioViewModel:Come utilizzare la funzione ko.validation.group

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); 
}  

Nel modello di vista precedente ho creato un gruppo di convalida denominato errori per l'oggetto corrente. Ora, se una qualsiasi regola di convalida fallisce su una qualsiasi proprietà su 4 di questa proprietà errori contiene un messaggio di errore.

My question is, se voglio creare un gruppo di validazione di solo 3 proprietà (P1, P2, P3) su 4 di come posso fare questo?

risposta

53

Questo ha funzionato bene per me. Anziché raggruppare su this, creare un oggetto proxy che contenga le proprietà che si desidera convalidare.

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

Se si esegue questa operazione, è possibile utilizzare al posto di validatedObservablegroup. Non solo ottieni gli errori, ma puoi verificare collettivamente se tutte le proprietà sono valide utilizzando la proprietà isValid.

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

utilizzato questo approccio per eseguire il debug Durandal problema di convalida Plugin osservabile. 'this.errors = ko.validation.group ({P1: observable (this, 'P1')});' Credo che avrebbe dovuto rilevare il getter/setter e ha reagito di conseguenza, ma questo almeno ha dimostrato che la validazione funziona. – MrYellow

11

Come descritto nel documentation il modo giusto per convalidare soltanto osservabili specifico è:

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

Dalla documentazione: > "Si noti inoltre che il primo parametro non deve necessariamente essere un array. Se si dispone solo di un singolo oggetto, è possibile passarlo come un oggetto nudo, senza avvolgerlo in un array." –

+0

tks per il link alla documentazione! – Alex

Problemi correlati