2013-07-29 14 views
12

Ich habe eine Ansicht Modell als solche: aberLöschen oder Zurücksetzen einer bestätigten Knockout-Validierung?

var prop1 = ko.observable().extend{ required: true }, 
    prop2 = ko.observable().extend{ required: true }; 

var validation = ko.validatedObservable([prop1, prop2]); 

function resetFields() { 
    prop1(undefined); 
    prop2(undefined); 
} 

var vm = { 
    prop1: prop1, 
    prop2: prop2, 
    validation: validation, 
    reset: resetFields 
}; 

Die Eigenschaften PROP1 und prop2 werden über die validatedObservable korrekt validiert, wenn ich resetFields ausführen, diese Eigenschaften dann Fehler auf sie haben, da sie geändert habe und sind erforderlich.

Gibt es eine Möglichkeit, die validierten beobachtbaren zurückgesetzt, als ob es sich nicht geändert worden wäre?

Update: Ich war Sourcing knockout.validation von NuGet und mit v1.0.1

Antwort

14

Sie können nicht auf dem validatedObservable Pegel zurückgesetzt, aber sie clearError auf die einzelnen Eigenschaften aufrufen:

vm.reset(); 
console.log(vm.validation.isValid()); // output: false 
prop1.clearError(); 
prop2.clearError(); 
console.log(vm.validation.isValid()); // output: true 

Demo JSFiddle.

Hinweis: Es funktioniert nur mit einer "neuesten" Version der v alidierung Plugin so die clearErrornicht in der CDNJS und Nuget Version des Plugin enthalten. Meine JSFiddle-Demo verwendet die neueste Version (9fd5a4d2da) von GitHub.

9

Wenn Sie eine validierte Observable verwenden, habe ich herausgefunden, dass Sie validatedObservable.errors.showAllMessages(false) aufrufen können, nachdem Sie die Observable gelöscht haben, die sich so verhält, wie ich in meiner Anwendung erwartet hatte.

+4

Diese Lösung aber nicht in allen Fällen funktionieren kann: die 'showAllMessages (false)' nur setzt das 'isModied' Observablen auf false die jedoch entfernt in den Fehlermeldungen führt ** es das Prüfungsergebnis nicht ** nicht löschen. Also bleibt 'isValid()' 'false':' vm.reset(); console.log (vm.validation.isValid()); // Ausgabe: false vm.validation.errors.showAllMessages (false) console.log (vm.validation.isValid()); // Ausgabe: false' http://jsfiddle.net/CjsCS/ – nemesv

Verwandte Themen