Ext.Loader

系统 1713 0

转载:http://blog.csdn.net/yanwushu/article/details/8296372

 

Ext.Loader ExtJs4+ 中是动态加载的核心。一般通过 Ext.require ()使用。Ext.Loader同时支持同步和异步加载方式。这里,我们将讨论这两种加载方式的优缺点。

 

异步加载

 

 

 

优势

 

 

跨域访问

不需要 web 服务器 : 你能通过文件系统协议运行程序。比如 file://path/to/your/index.html

        舒服的调试体验:错误信息将返回确切的文件名字和行数。

 

 

缺点

 

        依赖必须事先指定

 

使用方法

 

方法一:明确包含你想要的

 

[javascript]   view plain copy
  1. // Syntax    
  2. Ext.require({String/Array} expressions);   
  3.    
  4. // Example: Single alias    
  5. Ext.require( 'widget.window' );   
  6.    
  7. // Example: Single class name    
  8. Ext.require( 'Ext.window.Window' );   
  9.    
  10. // Example: Multiple aliases / class names mix    
  11. Ext.require([ 'widget.window' 'layout.border' 'Ext.data.Connection' ]);   
  12.    
  13. // Wildcards    
  14. Ext.require([ 'widget.*' 'layout.*' 'Ext.data.*' ]);   


 

方法二,明确排除你不想要的

 

 

[javascript]   view plain copy
  1. // Syntax: Note that it must be in this chaining format.    
  2. Ext.exclude({String/Array} expressions)   
  3.    .require({String/Array} expressions);   
  4.    
  5. // Include everything except Ext.data.*    
  6. Ext.exclude( 'Ext.data.*' ).require( '*' );   
  7.    
  8. // Include all widgets except widget.checkbox*,    
  9. // which will match widget.checkbox, widget.checkboxfield, widget.checkboxgroup, etc.    
  10. Ext.exclude( 'widget.checkbox*' ).require( 'widget.*' );   

 

同步加载

 

 

 

优势

        它不需要事先指明依赖,事先包含 ext-all.js 是很方便的
 

劣势

 

 

调试体验不好,除非用 Firebug 调试 ,否则出错的文件的名字不会显示。

不能跨域请求,因为 XHR 的限制必须是相同的域名 。并且因为这个原因,必须有 web 服务

 

 

使用方法

 

 

可以遵守一个简单的法则:用 Ext.create 代替new 关键字来 实例化对象。

 

15  Ext.create('widget.window', { ... }); // Instead of new Ext.window.Window({...}); 

16  Ext.create('Ext.window.Window', {}); // Same as above, using full class name instead of alias 

17  Ext.widget('window', {}); // Same as above, all you need is the traditional `xtype` 

 

在后台, Ext.ClassManager 会自动检查给定的类名 或别名是否在页面已经存在。如果没有, Ext.Loader 将会立即把它调整为同步模式,自动加载给定的类和它所有的依赖

 

 

混合加载


混合加载方式可以结合同步和异步加载的优势。开发流程非常简单:
第一步 : 用同步的方式写你的程序 ,Ext.Loader 将会自动按照需要获取所有的依赖,因为它们在运行时需要。例如:

 

[javascript]   view plain copy
  1. Ext.onReady( function (){   
  2.      var  window = Ext.createWidget( 'window' , {   
  3.         width: 500,   
  4.         height: 300,   
  5.         layout: {   
  6.             type:  'border' ,   
  7.             padding: 5   
  8.         },   
  9.         title:  'Hello Dialog' ,   
  10.         items: [{   
  11.             title:  'Navigation' ,   
  12.             collapsible:  true ,   
  13.             region:  'west' ,   
  14.             width: 200,   
  15.             html:  'Hello' ,   
  16.             split:  true    
  17.         }, {   
  18.             title:  'TabPanel' ,   
  19.             region:  'center'    
  20.         }]   
  21.     });   
  22.    
  23.     window.show();   
  24. })   


 

第二步:观看控制台的中如下的警告:

 

[javascript]   view plain copy
  1. [Ext.Loader] Synchronously loading  'Ext.window.Window' ; consider adding Ext.require( 'Ext.window.Window' ) before your application's code  
  2. ClassManager.js:432  
  3. [Ext.Loader] Synchronously loading  'Ext.layout.container.Border' ; consider adding Ext.require( 'Ext.layout.container.Border' ) before your application's code  


在Ext.onReady上面添加加载依赖的代码:
[javascript]   view plain copy
  1. Ext.require( 'Ext.window.Window' );Ext.require( 'Ext.layout.container.Border' );  
  2. Ext.onReady(...);  

这样,所有的东西都将通过异步的模式加载

 

 

发布

 

 

 

有一点很重要,动态加载至能在开发的时候在本机上使用。产品发布的时候,所有的依赖最好是组合成一个独一的 JavaScript 文件 。Ext.Loader 使项目从开发维护发布之间转换变得很容易 。在内部, Ext.Loader.history 控制了你的项目所有依赖的加载顺序的列表 。把这个列表中的所有依赖压缩成一个,然后把它包含在你项目的最顶部。这个处理过程将会使用SenchCommand 自动完成。

 

Ext.Loader


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论