Как справиться с предупреждением ExtJS "синхронная загрузка"
при использовании ExtJS 4+ с асинхронная загрузка можно было бы ознакомиться с такого рода предупреждением:
[Ext.Loader] Synchronously loading 'MY.particular.module';
consider adding Ext.require('MY.particular.module') above Ext.onReady
Как определить какой модуль на JavaScript (будь то контроллер, компонент и т. д.) вызывает это предупреждение? Т. е. место, где модуль include синхронно загружается в requires
список.
Что такое право способ обойти исправления эти предупреждения? Делает автоматическое способ сделать это существует?
P. S. А единственный способ сделать это прямо сейчас, чтобы установить точку отладки, где предупреждение, и проследить, в какой строке, какой файл ведет на предупреждение генерируется.
3 ответов
в chrome, в вашем stacktrace, (я думаю, что Firefox делает stacktraces также в настоящее время?) файл, который вызывает модуль, обычно (всегда?) 1-й файл, который не является ext-all.
Ext.require
что-то используется для автоматизации вещей ( например, JS-minification), поэтому вы не можете автоматизировать его сами по себе.
когда вы объявляете компонент (используя Ext.define
или Ext.create
) вы должны указать модули компонента, который Ext будет использовать для компонента с Ext.require
( ну, если вы хотите избавиться от этого предупреждения хотяб )
Ext.define('My.app.Panel', {
extend: 'Ext.panel.Panel', //
requires: [
'My.app.PanelPart2', //Hey! warning is gone!
'My.app.PanelPart3'
]
constructor: function (config) {
this.callParent(arguments);
//...
},
statics: {
method: function () {
return 'abc';
}
}
});
и если вы не заботитесь о производительности, и только хотите избавиться от случайных предупреждений ( безумие технически, вы можете просто испортить сообщение об ошибке в конфигурации загрузчика .
Ext.loader.setConfig({
enabled: true,
paths: {
'My': 'my_own_path'
},
onError:function(){}//or custom handler? :D
см. ответ mitchsimeons: http://www.sencha.com/forum/showthread.php?178888-Tons-of-Synchronously-Loading-Warning-Messages
и в блоге о том, почему требуется: http://www.sencha.com/blog/using-ext-loader-for-your-application
вы должны включать config в каждый модуль как вопрос хорошей практики программирования. Почему ты этого не делаешь?
У меня была такая же проблема, но я исправил ее сегодня. Проблема была в том, что это не помогло вернуться в stacktrace, так как в коде не было точки останова, и я не знал, куда поставить точку останова.
поэтому я добавил вызов отладчика ("debugger;") в строку ext-all-rtl-debug.JS файл браузер жаловался. Поэтому у меня был stacktrace и я узнал, где возникла проблема. После этого я удалил оператор debugger, и все работало так, как он должен.
проблема с моим кодом заключалась в том, что был магазин, который нуждался в специальном классе. Я добавил свойство "требует" в магазин, но это не помогло. Мне пришлось добавить свойство "requires" в приложение.файл js. Это исправило проблему.