首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

EXT 组装的生命周期

2012-11-01 
EXT 组建的生命周期????? 这几天再看EXT的书《Ext JS in Action》。看到life cycle.但凡发现带cycle的字眼的

EXT 组建的生命周期

????? 这几天再看EXT的书《Ext JS in Action》。看到life cycle.但凡发现带cycle的字眼的技术的貌似都挺重要的。这里当笔记记录一下。

??? 这里有一幅图:?
EXT 组装的生命周期
???? 这幅图很好的显示了。ext的生命周期有三个状态:initialization,Render,destruction

???

??? 能够很好的利用Ext的框架,就必须需要要理解这个生命周期是如何工作的。如果你需要拓展一个组件和插件等等。这就尤为重要。

??? 首先看看Initialization

???

Initialization

??? initialization时期就是组件出生的时候(直白翻译就是这样,原文是“The initialization phase is when the component is born”,怪别扭的),所有配置的设定,事件的注册,和pre-render(真不知道如何翻译。就是将组件放到需要显示的地方)都是在这个时期完成的。如图EXT 组装的生命周期

接下来是看看上图中的每一个步骤的详细信息:

??? 1.Configuration的应用(The configuration is applied):在实例化一个Component的一个实例的时候,需要传入一个包含所有所需要的参数和引用的配置对象(configuration object)让这个组件做指定的业务,当然这部分的的完成是在Ext.Component这个基类之前完成了

??? 2.组件事件的注册(Registration of the base Component events):每一个组件和每一个组件的子类,如果通过默认的方式,那么每一组事件都是从基类开始触发的。以下的一些方法是在被触发之前或者之后发生的:

??? enable/disable, show, hide, render, destroy, state restore, state save。如果一个注册事件的处理能够成功返回before events?将会触发和测试,如果不能成功返回将会在action真正被调用的地方取消方法的调用。例如:在myPanel.show被调用的时候,他将会触发beforeshow事件,并且执行注册在该事件上的任何方法。如果beforeshow事件处理的结果返回的是false,那么myPanel将不会显示

??? 3.ComponentMgr registration(ComponentMgr registration):每一个Component的实例都会注册到ComponentMgr这个class中去,并且有一个ext 产生的唯一的字符串类型的Id(Ext-generated ID),你可以在configuration object中传递一个参数(id)重写这个Ext-generated ID。需要注意的是如果传递的Ext-generated ID已经存在,那么新的Ext-generated ID将会覆盖前一个。如果你想使用自定义的id要注意这个id的唯一性

??? 4.执行initComponent(initComponent is executed):一个子孙类的initComponent这个方法里执行了很多工作。比如注册指定的事件,指定数据存储类型和子组件(child components)的创建。initComponent的使用是对组件结构的部署,因此在使用的一个关键所在就是要继承(extending)一个component或者是其他的Component的子类。我们在后面会详细介绍initComponent的继承(extending)

??? 5.Plugins are initialized:如果插件是通过传入到了配置对象(configuration object)中去构造的。那么他们的初始方法将会被调用,并且作为一个引用传递给父component。重要的是要记住,插件被调用的顺序与应用的顺序是一样的

??? 6.状态的初始化(State is initialized):If the component is state-aware, it will register its state with the global StateManager class. Many Ext widgets are state-aware

??? 7.Component is rendered:如果renderTo或者applyTo参数传入到了架构中去了,render阶段将会在这个时候开始,否则component将会处于dormant状态,并且等待着render方法被调用。

?

Render

??? 在这个时期,如果初始化成功了你将会得到该Component一个可视化的反馈(就是图形界面了)。如果初始化时期因为什么原因失败了,那么该Component可能就不能再该时期显示了。For complex components, this is where a lot of CPU cycles get eaten up, where the browser is required to paint the screen and computations take place to allow all of the items for the component to be properly laid out and sized

??? EXT 组装的生命周期

??? 如果renderTo 或者 applyTo 没有特别指明.那么render方法就必须被调用。在触发的时期,如果该组件不是其他ext component的子组件,那么必须必须调用render方法,传入一个Dom元素的应用:

???

component的destory方法可以通过父容器调用,或者直接通过代码调用。这里是生命周期的最终时期。

??? 1.beforedestroy is fired:就像很多“befor<action>”事件。是个可以取消的事件,如果他的处理方法返回的是false,将可以防止component的注销

??? 2.beforeDestroy is called:这个方法在Component的destory之前调用。在这里做一些移除非组建的items是最佳的选择。例如toolbars或者是button.子类都会预先调用父类的beforeDestroy。

??? 3.Element and Element listeners purged:如果component已经被rendered,所有被注册到element的处理方法都会被移除,然后element将会从dom结构中被移除。

??? 4.onDestroy is called:Component类自己的onDestory方法并不会执行任何操作,但是子类可以预先使用这个去执行post-destruction(不知道什么)操作,例如移除数据。至于Container类。它会间接地管理所有在该Container内的子类。并调用其子类的onDestory的方法进行销毁。最终减轻开发者的任务负担

??? 5.Component is unregistered from ComponentMgr(在ComponentMgr没有注册的Component):该component的引用将会被ComponentMgr删除.

??? 6.The destroy event is fired:任何注册在事件上的处理方法被该事件触发了之后就表示当前的组建已近不在DOM中了。

??? 7.Component’s event handlers are purged(清除事件方法):所有事件处理方法的注销是通过component调用的。

???

?

热点排行