Files
Ext.Loader是Ext JS 4+动态加载新依赖的核心。最常用的是通过Ext.require来简写它。 Ext.Loader支持异步和同步加载,并且能通过开发流程来充分利用它们的优势。 我们将讨论每种方法的优点和缺点:
优点:
file://path/to/your/index.html
)缺点:
// 语法
Ext.require({String/Array} 表达式);
// 例子: 单例别名
Ext.require('widget.window');
// 例子: 单例类名
Ext.require('Ext.window.Window');
// 例子: 多种 别名 / 类名 混合
Ext.require(['widget.window', 'layout.border', 'Ext.data.Connection']);
// 通配符
Ext.require(['widget.*', 'layout.*', 'Ext.data.*']);
// 语法: 注意它必须是这样的表达式。
Ext.exclude({String/Array} 表达式).require({String/Array} 表达式);
// 除了Ext.data.*,包括所有部件
Ext.exclude('Ext.data.*').require('*');
// 除了widget.checkbox*,包括所有部件
// 这将匹配 widget.checkbox, widget.checkboxfield, widget.checkboxgroup, 等组件.
Ext.exclude('widget.checkbox*').require('widget.*');
优点:
缺点:
有个简单的规则: 可以使用Ext.create实例一切类,而不使用'new'关键字
Ext.create('widget.window', { ... }); // 代替 new Ext.window.Window({...});
Ext.create('Ext.window.Window', {}); // 同上,使用完整的类名称,而不是别名
Ext.widget('window', {}); // 同上,如果你需要的是传统的 `xtype`
Ext.ClassManager会自动检查给定的类名/别名是否已经存在。 如果不存在,Ext.Loader将自动切换到同步模式并且自动加载给定的类和它的所有依赖关系。
它具有异步和同步加载的所有优势。开发流程很简单:
Ext.Loader 会自动获取所有需要的依赖关系。 例如:
Ext.onReady(function(){
var window = Ext.createWidget('window', {
width: 500,
height: 300,
layout: {
type: 'border',
padding: 5
},
title: '您好对话框',
items: [{
title: '导航',
collapsible: true,
region: 'west',
width: 200,
html: 'Hello',
split: true
}, {
title: 'TabPanel',
region: 'center'
}]
});
window.show();
})
[Ext.Loader] 同步加载'Ext.window.Window'在代码前考虑添加 Ext.require('Ext.window.Window') ClassManager.js:432
[Ext.Loader] 同步加载'Ext.layout.container.Border'在代码前考虑添加 Ext.require('Ext.layout.container.Border')
只需复制并粘贴上面的代码到'Ext.onReady'中,例如:
Ext.require('Ext.window.Window');
Ext.require('Ext.layout.container.Border');
Ext.onReady(...);
现在都通过异步模式加载。
重点要注意的是:只可用于在您本地计算机上的开发过程中动态加载。 在生产过程中,所有的依赖关系应该合并为一单独的JavaScript文件。 Ext.Loader 使整个过程的转变,从(开发)到(维护)再到(生产)尽可能容易。 在 Ext.Loader.history 内部维持你的应用程序需要的所有依赖的加载顺序列表。
这是简单的串联,把这个数组中的所有文件合为一体,然后将其包含在您的应用程序中。
整个过程将由Sencha Command(煎茶命令)自动完成,自动释放Ext JS 4 的相关文件。
禁用缓存 附加脚本文件的当前时间戳,以防止缓存。
Defaults to: true
禁用缓存参数 获取参数的名称缓存buster's时间戳。
Defaults to: "_dc"
垃圾回收 设置True准备异步的脚本标记为垃圾回收 (只有当 preserveScripts 为 false 才有效)
Defaults to: false
路径 测绘从命名空间的文件路径
{
'Ext': '.', //这是默认设置, Ext.layout.container.Container 将加载
//./layout/Container.js
'My': './src/my_own_folder' // My.layout.Container 将加载
// ./src/my_own_folder/layout/Container.js
}
注意所有的相对路径是相对于当前文件。
如果没有指定,例如 Other.awesome.Class
简单加载 ./Other/awesome/Class.js
Defaults to: {"Ext": "."}
保留脚本 错误删除和可选的 garbage-collect 异步加载脚本, True 保留脚本元素浏览器兼容性和更好的负载性能。
Defaults to: true
脚本链延迟 毫秒延迟的异步脚本注入(一些用户代理防止堆栈溢出) 'false' 禁用延迟,但可能会增加堆栈的负载。
Defaults to: false
脚本字符集 指定编码的动态脚本内容可选字符集。
Defaults to: false
已处理的文件维护清单,以便他们永远不会双重加载
已处理的文件维护清单,以便他们永远不会双重加载
是否是历史记录
是否是历史记录
Defaults to: 0
Defaults to: 0
包含引用的类 uses
属性.
包含引用的类 uses
属性.
保持数组中的所有依赖关系。在阵列中的每项的格式是一个对象:
{
requires: [...], // 此数组项所需的类
callback: function() { ... } // 当所有指定的类要求存在时,执行该函数
}
保持完全加载时所需的所有脚本执行的侦听器列表
保持完全加载时所需的所有脚本执行的侦听器列表
数组中所依赖的类的全类名的地图。
数组中所依赖的类的全类名的地图。
通过loadScript加载的脚本数目
Defaults to: 0
Defaults to: false
明确排除被加载的文件。使用时结合广泛表达式时有效。
可以用require
和 exclude
方法, 例如:
Ext.exclude('Ext.data.*').require('*');
Ext.exclude('widget.button*').require('widget.*');
排除
object 包含require
方法链接
将一个类名文件路径通过添加适当的前缀并且转换.'s 为 /'s. 例如:
Ext.Loader.setPath('My', '/path/to/My');
alert(Ext.Loader.getPath('My.awesome.Class')); // alerts '/path/to/My/awesome/Class.js'
请注意,更深的命名空间层次,如果有明确规定,优先解决。 例如:
Ext.Loader.setPath({
'My': '/path/to/lib',
'My.awesome': '/other/path/for/awesome/stuff',
'My.awesome.more': '/more/awesome/path'
});
alert(Ext.Loader.getPath('My.awesome.Class')); // alerts '/other/path/for/awesome/stuff/Class.js'
alert(Ext.Loader.getPath('My.awesome.more.Class')); // alerts '/more/awesome/path/Class.js'
alert(Ext.Loader.getPath('My.cool.Class')); // alerts '/path/to/lib/cool/Class.js'
alert(Ext.Loader.getPath('Unknown.strange.Stuff')); // alerts 'Unknown/strange/Stuff.js'
类名
path 路径
类名
类名
加载指定的脚本URL和调用提供的回调。 如果这个方法在Ext.isReady前调用,脚本的加载将延迟。 这可以被用来加载任意脚本可能包含更多的Ext.require调用。
刷新数组中的所有项目。如果项目的依赖关系存在循环, 它会执行回调并再次调用refreshQueue函数。当队列为空时,触发onReady
配置加载器。这应该放在ext-(debug).js调用之后,并且在Ext.onReady之前。 即:
<script type="text/javascript" src="ext-core-debug.js"></script>
<script type="text/javascript">
Ext.Loader.setConfig({
enabled: true,
paths: {
'My': 'my_own_path'
}
});
</script>
<script type="text/javascript">
Ext.require(...);
Ext.onReady(function() {
// 应用程序的代码在这里
});
</script>
参见配置选项Ext.Loader清单的属性
覆盖默认值的配置对象
this
设置路径命名空间。 例如:
Ext.Loader.setPath('Ext', '.');
名称 参见 flexSetter
路径 参见 flexSetter
this
触发就绪