本章描述了加载页面和更新页面的活动周期。
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页面,它创建并初始组件。这需要以下的一些步骤:
对于每个元素,它检查if
和unless
以确定元素是否有效。如果无效,此元素及其所有的子元素将 会被忽略。
如果forEach
被指定并伴随着一个项目的集合,ZK将会为集合中的每个项目重复以下步骤。
基于元素名字,或使用use
属性指定的类(如果有的话)创建一个组件。
基于在ZUML页面属性指定的顺序依次初始成员。
解释嵌套的元素(nested elements)并重复整个过程。
调用afterCompose
方法如果组件实现了org.zkoss.zk.ui.ext.AfterCompose
[30]接口。
在所有的组件都被创建后,onCreate
事件被送到该组件,这样之后应用程序可以初始划化一些元素的内容。注意,onCreate
事件首先为子组件公布。
[注]: 开发人员可以通过监听onCreate
事件或实现AfterCompose
接口来完成一些特定应用程序的初始化。AfterCompose
在组件创建阶段(the Component Creation Phase)被调用,而onCreate
事件是由事件监听器来处理的。一个事件监听器者可以自由地挂起或恢复执行(例如创建对话框(modal dialogs)),而由于AfterCompose
不需要派生另一个线程, 所以它快一些。
在这个阶段,ZK依次调用每个事件的监听器,这些事件已经为桌面排好队列。一个独立线程开始调用监听,这样它可以在不影响其它事件处理的情况下被挂起。
在处理过程中,一个事件可能引发其它事件,事件监听和处理(The Event Listening and Processing)一章来获得更多细节。