欢迎光临
我们一直在努力

ExtJS4源码解析(一)带项目分析

     ext这个东东太大了,能看完就已经很不错了,完整的源码分析就不敢说了,大概就涉及了类管理,事件管理,数据结构缓存架构,UI组件核心机制,MVC这几个方面,只是挑着源码看的,没有实际完整的使用.

公司的框架我是借鉴了EXT的结构..站在巨人的肩上我们可以走的更远,内部的结构我已经改动了,组件的形式去架构不适合咱公司~

     如图~

    

 

  • 昨天遇到个问题在mixins(向创建的类中要掺进其它类的信息)多个的时候就出问题了~ 顺便就发一下我的源码分析吧.当然是个人角度,有错误欢迎指出.
  • 发几本EXT的书,以前分析代码的时候看过了,感觉还行

 

EXT3.4 到 4.0改动真心很大…以前是用3.4玩的,后来看到4.0又把代码给整个重构了一次

 

ExtJs4.0中,涉及class实现的主要是Ext Core , Ext.Class, Ext.Base, Ext.ClassManager 这几个对象

  • Base.js定义了Base类,Base类是ExtJS4.0中所有通过Ext.define定义的类的直接或间接父类,Base类中定义了一些通用的实例与静态属性与方法;

  • Class.js文件中定义了Class类,所有通过Ext.define定义的类都是Class的实例(其实是Class构造函数中的newClass类);

  • ClassManager.js文件中定义了ClassManager单例,它主要负责对类的管理,如类的创建与类实例化等;

  • Loader文件中定义了Loader单例,实现了ExtJS4.0中动态加载类的功能。

我是用的sencha分析的,不过sencha也是基于ext的

在ExtJs4.0中,声明类的方式改为了 Ext.define('ClassName',{}); 这个方法其实是Ext.ClassManager.create的一个别名,具体用法请看API吧,这里只谈谈具体的实现

分析代码咱先从入口开始

实际上的处理函数就是定义在 Manager上的create方法了

在这个过程中,首先通过 Ext.Class建立原始Class,填充应用Ext.define中的配置信息,类预处理器。

在此方法内部,会先将className添加到data,之后会new一个Class并返回,所以可以说Ext.define出的类都是Class这个类的实例,这里其实是Class构造函数中的newClass类,Class实例都被Manager.classes给保存着

由此可见

ClassManager.js只是定义了ClassManager单例,它主要负责对类的管理,如类的创建与类实例化等;

真正核心的文件Class.js

其实内部转换做了几件事:用自己的语言表述下

其实在外部还有后处理器,这个以后再说

具体的实现咱们看源码:

这里要这样写,其实这里涉及到了EXT的组件模型管理机制

EXT是一套继承体系,

我先搬运一张3.4的图(4.0也类似)

 

用我的理解就是一种倒序法,简单的说

Extjs组件架构采用的是 一套倒树结构,父类子类之间关系是可以通过继承实现

还是用我的项目为例吧,反正这个东东我也实现了

new 一个Content对象

如图创建了一个  new xut.Content 对象, 可是在实际构造中,代码的开始执行确实最顶层基类Xut.Component

代码中的实现

定义的Xut.Content 类

 

 

 

//==============UI交互动作基类=================== //  // 子类  // 触发型热点 ActionBase // 交互型热点 WidgetBase // Xut.define('Xut.Component', { /* 开始定义 */ mixins: { observable: 'Xut.core.Observable' }, statics: { AUTO_ID: 1000 },

 

执行循序

new Xut.Content –> Xut.Component –> Xut.Behavior –> Xut.ActionBase –> Xut.Content –>

开始又往上层找 Xut-ActionBase –>Xut.Behavior->Xut.ActionBase –> Xut.Component

是不是很晕。。。ext内部就是这样玩的,为什么要这样,以后如果有时间说下UI组件机制就知道了

 

回归正题,这样的倒序调用,是怎么实现的

new一个子类,直接跨过N层到了基类Xut.Component

大家回过神来

注意这里

return this.constructor.apply(this, arguments);

当我们传递的第一个参数不是对象(函数也是对象),那么EXT内部帮我构造了个 构造函数

这是有什么用?第二节接着分析

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《ExtJS4源码解析(一)带项目分析》
文章链接:https://www.456zj.com/20769.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址