简体   繁体   中英

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?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM