6

当使用带有异步加载的 ExtJS 4+ 时,人们会熟悉这种警告:

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

如何识别导致此警告的 JavaScript 模块(控制器、组件等)?requires即在列表中同步加载包含模块的地方。

纠正这些警告的正确方法是什么?是否存在自动执行此操作的方法?

PS 现在唯一的方法是设置一个引发警告的调试点,并追溯到导致生成警告的文件中的哪一行。

4

3 回答 3

7

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

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

当你声明一个组件( usingExt.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

于 2012-08-13T13:28:23.273 回答
0

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

于 2012-08-13T09:15:56.947 回答
0

我有同样的问题,但今天解决了。问题是返回堆栈跟踪并没有帮助,因为代码中没有断点,而且我不知道在哪里放置断点。

因此,我在浏览器抱怨的 ext-all-rtl-debug.js 文件的行中添加了对调试器的调用(“debugger;”)。所以我有堆栈跟踪,发现问题发生在哪里。之后,我删除了调试器语句,一切正常。

我的代码的问题是有一家商店需要一个特殊的课程。我已经向商店添加了一个“需要”属性,但它没有帮助。我不得不在 application.js 文件中添加一个“requires”属性。这解决了问题。

于 2015-05-08T09:13:47.317 回答