extjs中动态加载机制研究2014-05-27昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果。以service registry portlet为例:比如,在 liferay-portlet.xml中定义了:

所以我们的js的入口点是app.js,这其中创建了Ext.application并且声明了动态加载controller:
Ext.application({ name: "serviceRegistry", appFolder: "/serviceregistryportlet/js/app", controllers:["mainPanel"], launch:function(){...)
我们这里具体看extjs是如何实现动态加载controller的。首先我们可以看到,当它在加载controller时候,所有这里声明的controller的都会以类全名的形式传递给classNames属性

Ext.Loader的config选项paths会收到2个属性,一个是默认的Ext的path,它的默认值定义如下:
config: { enabled: false, disableCaching: true, disableCachingParam: "_dc", paths: { "Ext": "." } },
另外一个就是从Ext.application中获取的属性,它的key 为Ext.application中定义的name(在这里是serviceRegistry),value为Ext.application中定义的appFolder(在这里是/serviceregistryportlet/js/app)如下图所示: