Ошибка: Cannot read property 'destructor' of undefined

Использую сервисы plugins.Locale и plugins.Theme.

Прекрасно заработали сразу. Пока не повесил их на sidemenu.

Не могу с той поры выйти из ошибки (ниже диагностика из DevTools Chrome для ‘locale’, то же самое и для ‘theme’), может быть подобная проблема имела место у кого-нибудь? Как решать?, всё перепробовал (вызывается
setLang(value, false), чтобы сделать refresh с изменённым языком, там и вызываются дектрукторы):

JetView.js:114 Uncaught TypeError: Cannot read property 'destructor' of undefined
    at JetViewRaw.destructor (JetView.js:114)
    at TopView.destructor (JetView.js:107)
    at JetApp.refresh (JetApp.js:90)
    at Object.setLang (Locale.js:24)
    at TopView.toggleLanguage (topview.js:452)
    at result.onChange (topview.js:342)
    at result.callEvent (webix_debug.js:574)
    at result.setValue (webix_debug.js:9004)
    at result._applyChanges (webix_debug.js:9296)
    at HTMLSelectElement.<anonymous> (webix_debug.js:247)
destructor @ JetView.js:114
destructor @ JetView.js:107
refresh @ JetApp.js:90
setLang @ Locale.js:24
TopView.toggleLanguage @ topview.js:452
onChange @ topview.js:342
callEvent @ webix_debug.js:574
setValue @ webix_debug.js:9004
_applyChanges @ webix_debug.js:9296
(anonymous) @ webix_debug.js:247
19:53:57.506 

К сожалению, у нас не получилось повторить ошибку локально
Судя по стек-трейсу, при попытке перерисовать интерфейс, одно из View содержит пустой элемент вместо Webix виджета. Такое возможно только если при его отрисовке произошла ошибка.

попробуйте добавить debug:true в конфигурацию приложения, и глянуть в консоли не будет ли там сообщений об ошибках во время отрисовки

Спасибо, maksim.

В отладчике видно, что в JetApp не инициализирована переменная _root.
Соответственно, _root.decstructor() приводит к краху.

Я могу пояснить мою схему реализации сервисов.

Если класс используемых сервисов генерируется как top/sets (sets - класс изменения локали и темы), то всё ок. Но хотелось покрасивее: я попытался сначала эти же работающие функции вставить в sidemenu. То есть, сверху там обычные пункты меню, запускающие какие-то свои view("…"), а снизу - view:“select” с Locale и Theme.
Сначала все реализации переключений языка и тем (toggle - функции) были прямо в классе TopView. Потом я переписал всё, используя отдельный класс, как это было изначально, но с обычным меню. Только view:“select” пытался тоже вставить в sidemenu.

Ничего не изменилось. Та же ошибка.
То есть, когда объекты создаются в { $subview:true }, то - всё без проблем, почти как в мануалах по Webix Jet. Но если это не так, - то нет в классе-носителе sidemenu объектов, которые создаются в этом sidemenu, так, что ли, получается?

В общем, упёрся конкретно, и вернулся к старой работающей схеме, но и с sidemenu наелся, не применяю пока, боюсь, что-нибудь ещё выскочит.

Судя по реализации, sidemenu вообще висит в воздухе. Оно двигается туда-сюда через $$(…). Вот я и не понимаю, как там в объектах, прикреплённых к sidemenu и не связанных друг с другом через Jet-механизм ({ $subview:true } ?..) в одном объекте может появиться _root на другой…

у меня была похожая ситуация. связано было с тем, что при деструкции объекта один из связанных объектов (созданных через this.ui(…)) был уже деструктирован. таким образом при повторном вызове destructor, его _root был неопределен.
решил проблему созданием собственного класса наследуя JetView и в дальнейшем используя его вместо JetView:

MyJetView.ts
export class MyJetView extends JetView {
    destructor(){
        if (this.app) { // т.е. destructor вызывается впервые
            super.destructor();
        }
    }
}

Спасибо, intregal!

Похоже, нужно быть очень аккуратным с сочетанием Webix Jet (this.ui(…)) и webix.ui(…) в одной упаковке. Почему-то у меня иногда декларируемые в Webix Jet руководстве методы не работают - ошибки типа описанной, чего-то где-то не существует… Делаешь через webix.* - всё идёт. И наоборот.
Я не добрался до подобного решения проблемы, пытался исследовать по исходникам Jet, отлавливая, откуда может инициироваться _root - а надо было ещё и незапланированную деструкцию отлавливать, как я понял, но стало понятно, что закопаюсь…