如何解决ExtJS"同步加载"警告

时间:2012-08-13 08:56:14

标签: extjs extjs4 extjs4.1 extjs-mvc

当使用带有asynchronous loading的ExtJS 4+时,人们会熟悉这种警告:

[Ext.Loader] Synchronously loading 'MY.particular.module';
consider adding Ext.require('MY.particular.module') above Ext.onReady

如何识别哪个JavaScript模块(无论是控制器,组件等)是否会导致此警告?即包含模块在requires列表中同步加载的位置。

围绕更正这些警告的正确方法是什么?是否存在以自动方式执行此操作?

P.S。现在唯一的方法就是设置一个调试点来引发警告,并追溯到哪个行导致生成警告。

3 个答案:

答案 0 :(得分:7)

在chrome中,在你的堆栈跟踪中,(我认为Firefox现在也会堆栈跟踪?)在模块中调用的文件通常(总是?)第一个不是ext-all的文件。

Ext.require是用于自动化东西(例如js-minification)的东西,所以你不能真正自动化它本身。

当您声明一个组件(使用Ext.defineExt.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

答案 1 :(得分:0)

作为良好的编程习惯,您应该在每个模块中加入requires配置选项。你为什么不这样做?

答案 2 :(得分:0)

我有同样的问题,但今天修好了。问题是它没有帮助回溯堆栈跟踪,因为代码中没有断点,我也不知道在哪里放置断点。

所以我已经将调试器("调试器;")的调用添加到浏览器抱怨的ext-all-rtl-debug.js文件的行中。所以我有堆栈跟踪并找出问题发生的地方。 之后,我删除了调试器语句,一切正常。

我的代码存在的问题是,有一个商店需要一个特殊的类。我已经添加了"要求"物业到商店,但它没有帮助。我必须添加"要求" application.js文件的属性。这解决了这个问题。