14

I have a view model as such:

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

The properties prop1 and prop2 are being validated correctly via the validatedObservable, however when I execute resetFields, these properties then have errors on them since they've been modified and are required.

Is there a way to reset the validated observable, as if it had not been changed?

Update: I was sourcing knockout.validation from NuGet, and using v1.0.1

gsk
  • 1,233
  • 15
  • 32
jamiebarrow
  • 2,473
  • 3
  • 30
  • 51

2 Answers2

18

You cannot reset on the validatedObservable level but you can call clearError on the individual properties:

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

Demo JSFiddle.

Note: It only works with a "recent" version of the validation plugin so the clearError is not included in the CDNJS and Nuget version of plugin. My JSFiddle demo uses the latest version (9fd5a4d2da) from GitHub.

gsk
  • 1,233
  • 15
  • 32
nemesv
  • 138,284
  • 16
  • 416
  • 359
12

When using a validated observable, I found out that you can call validatedObservable.errors.showAllMessages(false) after you have cleared the observable, which is behaving the way I was expecting in my application.

jamiebarrow
  • 2,473
  • 3
  • 30
  • 51
  • 4
    This solution could work but not in all cases: the `showAllMessages(false)` only sets the `isModied` observables to false which results in the error messages removed however **it does not clear the validation result**. So the `isValid()` will remain `false`: `vm.reset(); console.log(vm.validation.isValid()); //output: false vm.validation.errors.showAllMessages(false) console.log(vm.validation.isValid()); //output: false` http://jsfiddle.net/CjsCS/ – nemesv Feb 26 '14 at 19:48