Ext 4 概述(二)之Ext Core

Ext Core

新型类系统

Ext JS 4 的类机制主要围绕传统OO模型而设计,弥补了Prototype OO不足。虽然性质上仍为模拟的手段,但包含了比较完整的OO特征,并且保持对旧Ext3类机100%兼容。Ext JS 4(连同 Ext Core)提供的新功能有:

  • 继承方面Ext.defined代替了原来Ext.extend的写法。
  • 自动计算依赖关系及动态类加载。
  • 多态
  • 静态成员
  • 为配置项自动生成的getter/setter方法

 

ext4-class-system.jpg

如何写类?

你仍可在Ext4使用new ClassName()的语法,不过推荐使用Ext.define()函数定义新类。利用Ext类系统显式定义好的类,将有什么不同呢?关键字new仍然可用,可没太大的特别。Ext.define还有一个好处,自动创所须的建命名空间,从而免去声明命名空间的一步。

这里是利用新语法定义的一个新Ext.Component子类。

  1. // Ext 3:  
  2. Ext.ns('MyApp'); // 命名空间在Ext 3是必须的  
  3. MyApp.CustomerPanel = Ext.extend(Ext.Panel, {  
  4.     // etc.  
  5. });  
  6.    
  7. // Ext 4  
  8. Ext.define('MyApp.CustomerPanel', {  
  9.     extend: 'Ext.panel.Panel',  
  10.     // etc.  
  11. });  

加载类

Ext 4终于引入了动态类加载的系统了,虽然你可以选择使用,也可以选择忽略,但无论怎么说,终于考虑这点,希望社区不再利用此缺点来指责Ext之庞大。首先交待一下提供哪些功能:

  • 动态加载(Dynamic loading): 运行时期间,Ext内部会根据依赖树的关系异步地下载类文件。这意味你不用再页面上手动引入include子类的HTML标签就可以加载你所需的资源,同样不会造成阻塞。开发期间,动态加载的灵活性远比关心页面加载速度的意义打得多。
  • 动态生成build文件(Dynamic build generation) :对于产品化,很希望就是打包为一份文件,亦即build files。由于Ext已经清楚掌握依赖关系,所以很容易导出一个依赖关系图,适合于某些自定义build配置。更开放的是,不限于Ext的命名空间,只要按照Ext类规范写类,Ext就会计算它们的关系。在不久的将来,Ext开发者会享用”一键化“的build服务,而且一切都是经过智能计算的,决没有冗余的代码。

动态加载必须有两个前提条件,一是打开Ext.define;二是在写类的时候须清楚指明依赖关系,当中关系所涉及两个属性说明如下:

  • requires: 所依赖的类。保证当前被实例化之前其他类就绪。
  • uses: 可选的依赖,不一定必须的(上面requires是指定必须的模块)。uses的类可以异步下载,不限于一定要在类实例化之前(因为异步的,可能之后)。

多态Mixins

多态(或译作“混元”)可以为现有的某个对象注入客制功能提供一种灵活的方式。mixins配置项,包括实例化类期间,允许给类原型“混入”新的能力。这与Ext.override函数作用类似。尽管该方法不会覆盖现有的方法,就像override那样不会直接覆盖,但是该方法的参数还是。Mixins语法如下:

  1. Ext.define('Sample.Musician', {  
  2.     extend: 'Sample.Person',  
  3.     mixins: {  
  4.         guitar: 'Sample.ability.CanPlayGuitar',  
  5.         compose: 'Sample.ability.CanComposeSongs',  
  6.         sing: 'Sample.ability.CanSing'  
  7.     }  
  8. });  

静态成员(Statics)

通过statics这个属性可以设置类的静态成员。示例如下(谢谢SilverNet 兄提醒):

  1. Ext.define('MyClass', {  
  2.     statics: {  
  3.         idSeed: 1000,  
  4.         getNextId: function() {  
  5.             return this.idSeed++;  
  6.         }  
  7.     }  
  8. });  

配置项 Config

Ext之中我们用术语“配置项 (config items)”来表示任意的属性,这些属性在类原型(class prototype)都可以明确找到。有了配置项可以通过代码的调用对API读或者写。Ext 4在这点上基本没有什么问题,唯一作出新内容的便是带来了特定项“config”。当类定义中加入config属性,其对象所包含的内容指的就是“配置项”,而且强调一点就是,围绕配置项自动产生getter、setter、reset和apply方法,其中setter还提供模板方法自定义setter逻辑。基本示例代码如下:

 

……根据以上介绍的机制,自动生成下列方法:

  1. title: 'Default Title',  
  2.    
  3. getTitle: function() {  
  4.     return this.title;  
  5. },  
  6.    
  7. resetTitle: function() {  
  8.     this.setTitle('Default Title');  
  9. },  
  10.    
  11. setTitle: function(newTitle) {  
  12.    this.title = this.applyTitle(newTitle) || newTitle;  
  13. },  
  14.    
  15. applyTitle: function(newTitle) {  
  16.     // 自定义代码  
  17.     // 如Ext.get('titleEl').update(newTitle);  
  18. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值