第 4 章 组件活动周期

目录

加载页面的活动周期
页面初始阶段
组件创建阶段
事件处理阶段
响应阶段
更新页面的活动周期
请求处理阶段
事件处理阶段
响应阶段
模型(The Molds)
组件垃圾回收

本章描述了加载页面和更新页面的活动周期。

加载页面的活动周期

ZK加载器(ZK loader)加载并解释页面需要经历四个阶段:页面初始阶段,组件创建阶段,事件处理阶段及响应阶段(the Page Initial Phase, the Component Creation Phase, the Event Processing Phase, and the Rendering Phase)。

如果你手动创建所有组件(使用richlet [29] ),则没有页面初始阶段。

页面初始阶段

在这个阶段,ZK处理处理指令,被称为初始化(init)。如果并没有定义这样的处理指令,此阶段会被跳过。

对于每个init处理指令都有一个class属性,一个指定类的实例(instance)将会被创建,然后它的doInit方法将会被调用。当然,这个类要做什么取决于你的应用程序的需求。

<?init class="MyInit"?>

初始处理指令的另一种形式是使用zscrtpt属性指定包含脚本代码的文件如下。那么在页面初始阶段这个文件将会被解释。

<?init zscript="/my/init.zs"?>

请注意在这个阶段页面并没有被附加到桌面。

组件创建阶段

在这个阶段,ZK加载器(ZK loader)解释一个ZUML页面,它创建并初始组件。这需要以下的一些步骤:

  1. 对于每个元素,它检查ifunless以确定元素是否有效。如果无效,此元素及其所有的子元素将 会被忽略。

  2. 如果forEach被指定并伴随着一个项目的集合,ZK将会为集合中的每个项目重复以下步骤。

  3. 基于元素名字,或使用use属性指定的类(如果有的话)创建一个组件。

  4. 基于在ZUML页面属性指定的顺序依次初始成员。

  5. 解释嵌套的元素(nested elements)并重复整个过程。

  6. 调用afterCompose方法如果组件实现了org.zkoss.zk.ui.ext.AfterCompose [30]接口。

  7. 在所有的组件都被创建后,onCreate事件被送到该组件,这样之后应用程序可以初始划化一些元素的内容。注意,onCreate事件首先为子组件公布。

[注]: 开发人员可以通过监听onCreate事件或实现AfterCompose接口来完成一些特定应用程序的初始化。AfterCompose在组件创建阶段(the Component Creation Phase)被调用,而onCreate事件是由事件监听器来处理的。一个事件监听器者可以自由地挂起或恢复执行(例如创建对话框(modal dialogs)),而由于AfterCompose不需要派生另一个线程, 所以它快一些。

事件处理阶段

在这个阶段,ZK依次调用每个事件的监听器,这些事件已经为桌面排好队列。一个独立线程开始调用监听,这样它可以在不影响其它事件处理的情况下被挂起。

在处理过程中,一个事件可能引发其它事件,事件监听和处理(The Event Listening and Processing)一章来获得更多细节。

响应阶段

在所有的事件都被处理后,ZK将这些组件组成一个规则的HTML页面并将这个页面送到浏览器。

为了发送一个组件,redraw会被调用。在这个方法中,一个组件的实现(implementation)并不会更改其它组件的内容。



[30] step 3-5 即所谓的composing。这是此方法称为 AfterCompose的原因。