Как справиться с предупреждением 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. Это исправило проблему.