protoUI: RangeError: Maximum call stack size exceeded

Создаю новый компонент UIWin на базе webix.ui.window (это модальное окно с заголовком и кнопкой закрытия).
Далее уже на базе UIWin создаю компонент UIForm (эта форма для ввода/редактирования различных данных).
При вызове этой формы (нажатие на заначек пользователя справа от надписи ‘no autorized’ в строке меню) форма показывается правильно, но при клике на любое из двух полей ввода или на кнопку ‘Сохранить’ выскакивает ошибка : webix.js:710 Uncaught RangeError: Maximum call stack size exceeded at result.callEvent (webix.js:710:25).

исключение возникает тут :
//trigger event
callEvent: function (type, params) {
var master = this._event_master || this;
if (this._evs_events._block) return true;
type = type.toLowerCase();

  var event_stack = this._evs_events[type.toLowerCase()]; //all events for provided name


  var return_value = true;
  if ((debug_mode.events || this.debug) && type !== "onmousemoving") //can slowdown a lot
    log("info", "[" + this.name + "@" + (this._settings || {}).id + "] event:" + type, params);
  if (event_stack) for (var i = 0; i < event_stack.length; i++) {
    /*
    	Call events one by one
    	If any event return false - result of whole event will be false
    	Handlers which are not returning anything - counted as positive
    */
    if (event_stack[i].apply(master, params || []) === false) return_value = false;
  }

  if (this._evs_map[type]) {
    var target = this._evs_map[type];
    target.$eventSource = this;
    if (!target.callEvent(type, params)) return_value = false;
    target.$eventSource = null;
  }

  return return_value;
},

Прошу помощи у уважаемых гуру.

webix UI v.9.4.0,
Google Chrome Версия 105.0.5195.102 (Официальная сборка), (64 бит)

CODE SNIPPET
https://snippet.webix.com/4pc01obf

==============================================================================
I create a new UIWin component based on webix.ui.window (this is a modal window with a title and a close button).
Further, on the basis of UIWin, I create a UIForm component (this form is for entering / editing various data).
When this form is invoked (clicking on the user’s stash to the right of the ‘no autorized’ label in the menu bar), the form is displayed correctly, but when either of the two input fields or the ‘Save’ button is clicked, an error pops up: webix.js:710 Uncaught RangeError: Maximum call stack size exceeded at result.callEvent (webix.js:710:25).

the exception occurs here:
//trigger event
callEvent: function (type, params) {
varmaster = this._event_master || this;
if (this._evs_events._block) return true;
type = type.toLowerCase();

  var event_stack = this._evs_events[type.toLowerCase()]; //all events for provided name


  var return_value = true;
  if ((debug_mode.events || this.debug) && type !== "onmousemoving") //can slowdown a lot
    log("info", "[" + this.name + "@" + (this._settings || {}).id + "] event:" + type, params);
  if (event_stack) for (var i = 0; i < event_stack.length; i++) {
    /*
    call events one by one
    If any event return false - result of whole event will be false
    Handlers which are not returning anything - counted as positive
    */
    if (event_stack[i].apply(master, params || []) === false) return_value = false;
  }

  if (this._evs_map[type]) {
    var target = this._evs_map[type];
    target.$eventSource = this;
    if (!target.callEvent(type, params)) return_value = false;
    target.$eventSource = null;
  }

  return_value;
},

I ask for help from respected gurus.

у вас повторно использован миксин webix.IdSpace в UIForm.
он задействован в UIWin, и его нельзя повторять.
так же, крайне не рекомендуется повторное использование конфигов.
таких, как CHANGE_PASS_FORM или CANCEL_BTN, SUBMIT_BTN.
равно, как и использование конфигов в defaults (например UIWin.defaults.head)
вместо объектов, лучше использовать фабрику объектов или же копировать объекты, если они простые. обратите внимание на исправленные конфиги и их использование.
если оставить CANCEL_BTN и SUBMIT_BTN как есть, то при последующем вызове окна, они не будут функционировать.
CHANGE_PASS_FORM на данном этапе ошибки не вызывает, но подобное использование вполне может быть причиной ошибки в другой реализации.
https://snippet.webix.com/ih295gtt

1 Like

Большое спасибо! Усвоил на будущее.