组件模型在Ext1.x中已经引入了,但在框架中并没有得到全面的整合。2.0以后组件得到了很大的提高和改进,成为了框架的里最基础的一个类。组件对象模型为组件的创建、渲染、事件处理、状态管理和销毁提供了统一的模型。Ext内置的组件都具备以上这些特征。
-
创建
组件会将一个基础构造器连同配置传入到子类中。函数initComponent用于提供制定的构造器逻辑,只要在继承链上的某一个子类实现便可,所有的组件都遵从这种方式。此时的子类就可在initComponent中对其设置相关的属性,实现具体的功能。
-
渲染
2.0中,每个组件都支持延时渲染(lazy rendering),又称按需渲染(on-demand rendering)。渲染的调控一般是为你自动设置完好的。即使如此,你亦可以通过的beforerender和render事件控制渲染发生、结束,达到最为灵活的自定义调控。
-
销毁
每一个组件具有destroy的函数,当组件不再需要时,Ext就负责组件的结束调控,如自动垃圾回收和摧毁组件元素。当然,销毁亦提供相应的事件,如beforedestroy和destroy可按照实际的情况作出逻辑处理。
-
状态管理
组件内建设置和获取状态(State)的功能,只要让全局对象StateManager和一个状态 Provider都初始化好,那么多数的组件都具有自动状态管理的能力。
-
常规行为统一接口
一般常规的行为如隐藏、显示和激活、禁用均是组件的基本特性。如需要,这些都可由子类去重写或制定。
-
可调用
Ext的每一个组件在创建的时候就会由组件管理器登记注册,即你可随时获取任何组件,只需调用Ext.getCmp('id')。
-
支持插件
现在任何的组件可以通过插件的形式来扩展了。插件实质是带有init方法的一种类。该方法会有一个单独的参数(类型为Ext.Component)传入到其中。插件可通过组件的plugins配置项指定。当组件创建时,如果有插件可用,组件就会调用每个插件上的init方法,将自身的引用作为参数传入。 每个插件运行之后可调用组件的方法或响应组件的事件以实现自身的功能。
组件模型的统一主要是基于OO对象模型的,OO模型提供了类型继承机制,使得从组件基类扩展的所有子类都能够拥有统一的特征(如事件订阅的能力)。而具体每一个特征都和所有公共的实用类不可分割,比如组件的可调配性是基于管理容器实现的,而容器的应用在整个框架中随处可见,再比如事件能力又和事件模型的定义不可分割,事件模型中事件对象和订阅对象的管理也要依赖于容器对象。其实在Javascript中最简单而基础的容器莫过于对象本身(可以认为数组也是对象的一种包装)。
组件生命周期
-
传入配置调用
-
底层事件创建
-
组件注册
-
状态感知
-
加载插件
-
渲染
-
触发beforerender事件 The beforerender event is fired。这是个可取消的事件,指定的句柄(handler)可阻止组件进行渲染
-
设置好容器 The container is set
-
如果没有指定一个容器,那么将使用位于DOM元素中组件的父节点作为容器。
-
-
销毁
-
继续
-