validation.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * DevExtreme (integration/knockout/validation.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var each = require("../../core/utils/iterator").each;
  11. var Class = require("../../core/class");
  12. var EventsMixin = require("../../core/events_mixin");
  13. var ValidationEngine = require("../../ui/validation_engine");
  14. var ko = require("knockout");
  15. var koDxValidator = Class.inherit({
  16. ctor: function(target, option) {
  17. var that = this;
  18. that.target = target;
  19. that.validationRules = option.validationRules;
  20. that.name = option.name;
  21. that.isValid = ko.observable(true);
  22. that.validationError = ko.observable();
  23. each(this.validationRules, function(_, rule) {
  24. rule.validator = that
  25. })
  26. },
  27. validate: function() {
  28. var result = ValidationEngine.validate(this.target(), this.validationRules, this.name);
  29. this._applyValidationResult(result);
  30. return result
  31. },
  32. reset: function() {
  33. this.target(null);
  34. var result = {
  35. isValid: true,
  36. brokenRule: null
  37. };
  38. this._applyValidationResult(result);
  39. return result
  40. },
  41. _applyValidationResult: function(result) {
  42. result.validator = this;
  43. this.target.dxValidator.isValid(result.isValid);
  44. this.target.dxValidator.validationError(result.brokenRule);
  45. this.fireEvent("validated", [result])
  46. }
  47. }).include(EventsMixin);
  48. ko.extenders.dxValidator = function(target, option) {
  49. target.dxValidator = new koDxValidator(target, option);
  50. target.subscribe(target.dxValidator.validate.bind(target.dxValidator));
  51. return target
  52. };
  53. ValidationEngine.registerModelForValidation = function(model) {
  54. each(model, function(name, member) {
  55. if (ko.isObservable(member) && member.dxValidator) {
  56. ValidationEngine.registerValidatorInGroup(model, member.dxValidator)
  57. }
  58. })
  59. };
  60. ValidationEngine.unregisterModelForValidation = function(model) {
  61. each(model, function(name, member) {
  62. if (ko.isObservable(member) && member.dxValidator) {
  63. ValidationEngine.removeRegisteredValidator(model, member.dxValidator)
  64. }
  65. })
  66. };
  67. ValidationEngine.validateModel = ValidationEngine.validateGroup;