UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

91 lines (76 loc) 2.7 kB
"use strict"; var each = require("../../core/utils/iterator").each, Class = require("../../core/class"), EventsMixin = require("../../core/events_mixin"), ValidationEngine = require("../../ui/validation_engine"), ko = require("knockout"); var koDxValidator = Class.inherit({ ctor: function ctor(target, option) { var that = this; that.target = target; that.validationRules = option.validationRules; that.name = option.name; that.isValid = ko.observable(true); that.validationError = ko.observable(); each(this.validationRules, function (_, rule) { rule.validator = that; }); }, validate: function validate() { var result = ValidationEngine.validate(this.target(), this.validationRules, this.name); this._applyValidationResult(result); return result; }, reset: function reset() { this.target(null); var result = { isValid: true, brokenRule: null }; this._applyValidationResult(result); return result; }, _applyValidationResult: function _applyValidationResult(result) { result.validator = this; this.target.dxValidator.isValid(result.isValid); this.target.dxValidator.validationError(result.brokenRule); this.fireEvent("validated", [result]); } }).include(EventsMixin); ko.extenders.dxValidator = function (target, option) { target.dxValidator = new koDxValidator(target, option); target.subscribe(target.dxValidator.validate.bind(target.dxValidator)); return target; }; // TODO: MODULARITY: Move this to another place? /** * @name validationEngineMethods.registerModelForValidation * @publicName registerModelForValidation(model) * @param1 model:object * @static */ ValidationEngine.registerModelForValidation = function (model) { each(model, function (name, member) { if (ko.isObservable(member) && member.dxValidator) { ValidationEngine.registerValidatorInGroup(model, member.dxValidator); } }); }; /** * @name validationEngineMethods.unregisterModelForValidation * @publicName unregisterModelForValidation(model) * @param1 model:object * @static */ ValidationEngine.unregisterModelForValidation = function (model) { each(model, function (name, member) { if (ko.isObservable(member) && member.dxValidator) { ValidationEngine.removeRegisteredValidator(model, member.dxValidator); } }); }; /** * @name validationEngineMethods.validateModel * @publicName validateModel(model) * @param1 model:object * @return object * @static */ ValidationEngine.validateModel = ValidationEngine.validateGroup;