Euphe
Euphe

Reputation: 3709

KO validation: model.errors is undefined

I have this model

var MarketResearch = function (data) {
    var self = this;
    self.Validate = function() {
        if (!self.isValid()) {
            self.errors.showAllMessages();
            return false;
        }
        return true;
    };
    this.id = data ? data.id : 0;
    this.city = ko.observable(data ? data.city : '').extend({ required: true });
    this.since = ko.observable(data ? data.since : '').extend({ required: true });
    this.title = ko.observable(data ? data.title : '').extend({ required: true });
}

Here is the view:

function onDocumentReady() {

    koValidationConfig()

    // initializeDataPickers(market);
    // createCkEditor('market_editor');
    ko.applyBindings(market, document.getElementById("market-form"));
}
var market = new MarketResearch(null);
    function onSaveMarketClicked() {
        market.errors.showAllMessages();
    }

function koValidationConfig() {
    ko.validation.rules.pattern.message = 'Invalid.';

    ko.validation.configure({
       // registerExtenders: true,
        messagesOnModified: true,
        insertMessages: true,

        decorateInputElement: true,

    });
    ko.validation.registerExtenders();
}

I have some required fields here. When I put nothing in the fields it displays "this field is required" and colors the form elements. But market.errors is always undefined, so I can't check if the form is valid!

market.errors.showAllMessages();

Doesn't work too.

Ko.validation is defined, I checked.

What's wrong?

Upvotes: 0

Views: 796

Answers (1)

sabof
sabof

Reputation: 8192

ko.validation adds an errors property to observables, not models. You also need to use .extend on an observable to enable validation.

Upvotes: 1

Related Questions