Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Duplicate class name 'Ext.ux.AppInspector' specified, must be a non- (https://javascript.ru/forum/extjs/55943-duplicate-class-name-%27ext-ux-appinspector%27-specified-must-non.html)

khusamov 22.05.2015 04:24

Duplicate class name 'Ext.ux.AppInspector' specified, must be a non-
 
Вылезла такая ошибка:

[W] [Ext.define] Duplicate class name 'Ext.ux.AppInspector' specified, must be a non-empty string


Долгие поиски проблемы привели к следующем.

Оказывается, один класс требует загрузку другого класса через requires, тот в свою очередь требует еще какой-то класс и так далее (глубина может быть невообразимоглубокой блин).

В итоге, если какой-то промежуточный класс в этой цепочке случайно по ошибке потребует один из предыдущих классов, то возникнет вышеупомянутая ошибка о дублировании имени класса. В общем проблема в том, что найти ошибку весьма непросто.

Можно ли сенчу заставить выводить нечто более внятное? Например номер строки с первым проблемным requires?

novikov 22.05.2015 12:27

Это не ошибка, а предупреждение - warning:

if (Manager.classes[className]) {
                        Ext.log.warn("[Ext.define] Duplicate class name '" + className + "' specified, must be a non-empty string");
                    }


Пробовали уже подключить ext-all-debug.js вместо ext-all.js?

khusamov 22.05.2015 15:39

У меня постоянно включен именно ext-all-debug.js
С ним очень удобно отлавливать ошибки.

khusamov 22.05.2015 15:41

Я имел ввиду ошибка в смысле, что это дело валит всю программу. А так да, предупреждение какое-то... Точнее понятно какое, не понятно почему оно прицепляется именно к Ext.ux.AppInspector, будто это не ихний класс.

novikov 22.05.2015 15:51

Могу предположить, что из-за ux.

Некоторые пишут так:

Ext.Loader.setConfig({
    enabled: true,
    paths: {
        'Ext.ux': '/scripts/ext/ext-4.1.1/ux'
    }
});

nohuhu 22.05.2015 21:38

Цитата:

Сообщение от khusamov
Можно ли сенчу заставить выводить нечто более внятное? Например номер строки с первым проблемным requires?

Вряд ли. Зависимости отслеживаются асинхронно, и к моменту, когда становится понятно, что "Хьюстон, у нас проблема", стек развинтить уже нереально и нужной информации просто нет.

Вообще это как раз одна из причин, почему Sencha Cmd как инструмент имеет место под солнцем: отслеживание зависимостей давно перестало быть тривиальным делом в Ext JS. :(

По поводу круговых зависимостей: круг можно разорвать, используя uses вместо requires. Собственно, только для этого uses и можно использовать, и только когда совсем уж надо.

khusamov 23.05.2015 00:14

ну да... я пока этим страшным uses и спасаю дело... но похоже от него тоже надо как-то избавляться...

nohuhu 23.05.2015 00:40

Неа, не надо. Оно как раз для таких случаев и предназначено, так что используйте на здоровье.

Другое дело, что я частенько вижу попытки использовать uses вместо requires, типа "так красивее". Вот это делать не надо, я как раз об этом говорил.

Понимайте, зачем инструмент существует, и используйте его по назначению. Не по назначению лучше не использовать, т.к. может привести к зловредным, усатым, и жутко кусачим насекомым, которые фиг ещё поймаешь. JavaScript вообще ужасный язык, энтропию провоцирует на каждом углу, поэтому дисциплина с ним нужна железная. :(


Часовой пояс GMT +3, время: 00:21.