当使用带有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。现在唯一的方法就是设置一个调试点来引发警告,并追溯到哪个行导致生成警告。
答案 0 :(得分:7)
在chrome中,在你的堆栈跟踪中,(我认为Firefox现在也会堆栈跟踪?)在模块中调用的文件通常(总是?)第一个不是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
答案 1 :(得分:0)
作为良好的编程习惯,您应该在每个模块中加入requires
配置选项。你为什么不这样做?
答案 2 :(得分:0)
我有同样的问题,但今天修好了。问题是它没有帮助回溯堆栈跟踪,因为代码中没有断点,我也不知道在哪里放置断点。
所以我已经将调试器("调试器;")的调用添加到浏览器抱怨的ext-all-rtl-debug.js文件的行中。所以我有堆栈跟踪并找出问题发生的地方。 之后,我删除了调试器语句,一切正常。
我的代码存在的问题是,有一个商店需要一个特殊的类。我已经添加了"要求"物业到商店,但它没有帮助。我必须添加"要求" application.js文件的属性。这解决了这个问题。