所以我继承了这个extjs 4.1.3项目,我试图理解它。
我注意到Ext.require和Ext.define都需要无处不在。代码是由sencha docs的许多样板代码组成的,我觉得有很多冗余。它会造成很多混乱,我觉得错误的是当我添加一个文件时,我不得不多次添加它(对于Ext.require和Ext.define的要求)。
几个问题:
1)如何确定需求是否真的......需要?根据我的理解,它只告诉网页现在或以后加载一些东西(这可能与问题3有关)。如果需要这些文件,我保证会看到Ext的警告“你应该包括abc吗?”
2)Ext.require和Ext.define要求有什么区别吗?我需要两个吗?如果我只需要一个,那么比另一个更“标准”吗?
3)究竟是什么“Ext.Loader.setConfig({enabled:true});”做?我猜是如果我没有特别要求它们让ext动态加载东西。那不是我根本不需要吗?我不是说这是好习惯,但这是真的吗?实际上,如果有的话,是不是在使用这种不良做法?如果你没有记下它们,你最终会失去对依赖项的追踪。或者你“信任”Ext.Loader来处理与依赖关系有关的所有事情,这样你甚至不必担心它。
我问的原因是因为我认为这是真的,但经过以下经验,我认为不是。
我以为我想到了这一点,但显然我对Ext.Loader(问题3)的解释是错误的,因为如果我评论出我的所有要求,我会得到
[07:15:05.577] Error: [Ext.createByAlias] Cannot create an
instance of unrecognized alias: layout.border
如果我拿出'Ext.layout。*。如果有Ext.Loader.setConfig({enabled:true}),为什么不动态加载?
TLDR:我不知道什么时候使用Ext.require / Ext.define是安全/好的做法。如果我没有看到任何警告并且我的应用程序有效,这是否意味着我很好或是否仍有机会被“加载”以及它可能是什么? Ext.Loader.setConfig({enabled:true})有什么作用?
编辑:这是一个例子:app.js文件。只是觉得罗嗦不是吗?
Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', 'ux');
Ext.require([
'Ext.layout.*',
'Ext.ux.*',
'Ext.grid.*',
'APP.controller.Controller',
'APP.view.MapPanel',
'APP.view.FilterPanel',
'APP.view.Viewport'
]);
var start_app = function() {
var app = Ext.application({
name: 'APP',
appFolder: 'app',
requires: [
],
autoCreateViewport: true,
uses: [
'APP.controller.Controller',
'APP.view.MapPanel',
'APP.view.FilterPanel',
'APP.view.Viewport'
],
launch: function() {
},
controllers: [
'APP.controller.Controller'
]
});
}
答案 0 :(得分:1)
在上面的代码中,您只需要controllers:['Controller']
。反过来,在控制器文件中,您需要views:[]
,stores:[]
和models:[]
,具体取决于您希望控制器从服务器提取的内容。
另一个例子:假设您编写网格代码并使用数字列,因此您需要在网格配置中使用requires:['Ext.grid.column.Number'
。
我所做的是我把它放在最低限度,我认为是必需的,然后我看着控制台。我得到一个错误,我修复它或我得到"同步加载"警告说我也修好了。
有关详细信息,请参阅:http://www.sencha.com/blog/countdown-to-ext-js-4-dynamic-loading-and-new-class-system