Search code examples
javascriptknockout.jsknockout-validation

Knockout Validation on existing view model


I would like to ask you can I add knockout validation to a whole model, not to each property. I create a view model using this code:

    var UserViewModel = function() {
        return @Html.Raw(Json.Encode(Model.UserViewModel));
    };

   var entry = ko.mapping.fromJS(new UserViewModel());

Now, can I extend this view model by adding validation rules ? For example:

entry.extend('propertyName', rules...)

Solution

  • You can use the mapping plugin to create observables for you like

    var UserViewModel = function(data) {
            ko.mapping(data, {}, this);
    };
    

    Then you can create validation dynamicly like

    function addValidation(vm) {
       for(var index in vm) {
          var member = vm[index];
           if(ko.isObservable(member) && !ko.isComputed(member)) {
               member.extend({ required: true });
    
               if(typeof member() === "number") {
                   member.extend({ number: true });
               }
           }
       }
    };
    

    http://jsfiddle.net/CfKmw/1/