组件(component)是一种用户接口(UI)对象,如一个标签、按钮、树。

        页面(page)是一个组件的集合。
        桌面(desktop)是一个包含相同URL请求的页面。
 
4.1、ZUML页面的生命周期
 
(1) 页面初始化阶段
        ZK会运行一个叫做init的处理指示。如果没有定义这样的处理指示,就会跳过这个(初始化阶段)。
        对于每个init处理指示,都有一个class属性,在其中会创建一个指定类的失利,并调用她的doInit()方法。<?init class="MyInit"? >指定了MyInit类作为页面的初始化类。这个类的处理依赖于你的应用程序的需求。
      另一种传递init处理指示的方式是,制定一个zscript文件。<?init zscript="/my/init.zs"?>,那么会在页面初始化阶段对这个zscript文件进行解析。
          当执行页面初始化阶段时,并没有在桌面中添加页面。
 
(2)组建创件阶段
        ZK加载器解析ZUML页面,创建并初始化组件。
        a、对于每个元素而言,ZK加载器检查if和unless属性,判断它们是否为true。如果不是,就会忽略这个元素及他的子元素。
      b、对于一个集合而言,如果指定了forEach属性,ZK将为集合中每个集合项一次执行以下步骤c~g。
        c、ZK加载器根据元素名称或类中指定的use属性,参加一个组件。
        d、按照顺序一个个地初始化组件类的成员,并在ZUML页面中指定属性。
        e、ZK加载器解析到任意嵌套元素,就重复整个过程。
        f、如果组件实现了org.zkoss.zk.ui.ext.AfterConpose接口,加载器将调用afterCompose()方法。
      g、创建完所有子元素后,将发送onCreate事件给该组建,这样应用程序就能够接着初始化剩下的元素内容。子组件首先提交onCreate事件。
 
(3)事件处理阶段
        在时间处理阶段中,zk一次调用桌面队列(queue)中每个事件监听器。每次调用监听器都会使用一个独立的线程,因此它能够进行自动悬挂式运行,而不影响其他事件的处理。
        在处理过程中,一个事件监听器可能会触发另外的事件。
 
(4)回填阶段
        处理完所有的事件后,ZK将所有的组件会天到一个有规则的HTML页面中,并将该页面发送给浏览器。要回填组件,需要调用redraw()方法。
        redraw()方法不会改变组件的任何内容。
 
4.2 更新页面
    ZK异步更新引擎将请求以管道的形式添加到队列中,并未每个桌面创建一个队列。因此,同一个桌面的请求会按顺序进行处理,不同的桌面请求会并发进行处理。
 
(1)请求处理阶段
        ZK异步更新引擎可能会根据请求中的要求来更新相关的内容,这样,这些组件和显示在客户端的内容保持一致。然后,ZK异步更新引擎将相关的事件提交到队列中。
 
(2)事件处理阶段
        这个阶段和加载ZUML页面的时间处理阶段采用同样的方式。他一次处理事件,并且对每个事件的处理使用独立的线程。
 
(3)回填阶段
        处理完所有事件后,ZK传送已更新的组件,生成相应的ZK响应,并将这些响应信息发送会客户端。客户端引擎根据这些响应信息更新浏览器中DOM树。
 
4.3 组件垃圾回收
        ZK的每个组件并没有destroy()或close()方法。只要从页面上卸载了组件,就应该从浏览器中删除了该组件。一个页面一旦卸载了一个组件,如果应用程序没有任何指向它的引用,那么ZK将不再对其负责管理。而组件分配的内存将通过Java虚拟机(JVM)的垃圾收集器进行释放。
      
4.4 使用组件的属性
4.4.1 组件id,if,unless
        组件一般使用的属性是id,它为组件分配一个唯一的标识符。可以在if或unless属性中制定相关语句,来决定是否创建组件,而且也可以使用forEach属性来决定要创建的组件数量。同时,也可以使用use属性将组件赋值给另一个Java类,这样可以替换原来默认的Java类。
        if和unless属性定义true或false,可以用来判断是否创建组件。如果为组件指定了这两个属性,那么只有这两个属性均为true时才创建该组件。
 
4.4.2 组件的forEach属性
        组件的forEach属性用来决定创建多少个组件。若为一个集合对象指定了该属性,zk加载器将会为该集合内的每一个条目创建一个组件。
 
4.4.3 组件use属性
        将UI部分代码和控制处理的代码进行分离,可以减轻维护的负担。试图分离常见两种方式:
        将控制代码放到一个单独的类中,然后注册事件监听器来调用和公司的方法。
            另一种方式是使用use属性指点过一个类来取代默认的组件类。
<window use="MyWindow" />
 
 
 
 

ZK框架笔记4、通用组件、页面、桌面的更多相关文章

  1. ZK框架笔记1、ZK Ajax框架简介

    简介    ZK是一个基于事件驱动和组件的框架,他为web应用提供了丰富的接口.zk包括一个基于Ajax的事件驱动引擎.一整套丰富的XML用户接口语言(XML User Interface Langu ...

  2. ZK框架笔记3、窗体组件

    <window title="My First window" border="normal" width="200px" closa ...

  3. ZK框架笔记2、ZK框架安装、相关类库、web及zk配置

    1.先去ZK官网注册一个账号 2.在MyEclipse菜单栏中Help----Eclipse Marketplace中搜索ZK Studio,点击install安装即可         3.相关类库 ...

  4. ZK框架笔记5、事件

            事件是org.zkoss.zk.ui.event.Event类,它通知应用程序发生了什么事情.每一种类型的事件都由一个特定的类来表示.         要响应一个事件,应用程序必须为事 ...

  5. Unityclient框架笔记二(组件实体开发模式的思考)

    Unity的Entity-Component-System实现的很美丽,很灵活.许多文章也对这样的组件实体的开发模式倍加推崇.由于它契合这么一条规则:优先使用组合而不是继承. 可是实际开发过程中,限制 ...

  6. 饿了么基于Vue2.0的通用组件开发之路(分享会记录)

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

  7. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  8. Vue2.0的通用组件

    饿了么基于Vue2.0的通用组件开发之路(分享会记录)   Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库. ...

  9. Web桌面应用框架2:著名的WEB桌面应用分析

    前一篇文章里,分析了包括NW.js和electron这种纯JS框架在内的几种Web桌面应用开发方式,实际上还有一种最古老的方式,那就是嵌入WebView的方式. 嵌入WebView的方式和整个程序都是 ...

随机推荐

  1. 洛谷——P1680 奇怪的分组

    P1680 奇怪的分组 题目背景 终于解出了dm同学的难题,dm同学同意帮v神联络.可dm同学有个习惯,就是联络同学的时候喜欢分组联络,而且分组的方式也很特别,要求第i组的的人数必须大于他指定的个数c ...

  2. HZAU 1205 Sequence Number(双指针)

    题目链接:http://acm.hzau.edu.cn/problem.php?id=1205 [题意]给你一串数,要求你找到两个数a[i],a[j],使得a[i]<=a[j]且j>=i且 ...

  3. hdu 5755(Gauss 消元) &poj 2947

    Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  4. BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...

  5. 【点分治】【FFT】Gym - 101234D - Forest Game

    存个求树上每种长度(长度定义为路径上点数)的路径条数的模板:num数组中除了长度为1的以外,都算了2次. 不造为啥FFT数组要开八倍. #include<cstdio> #include& ...

  6. 【凸包】【三分】Gym - 101309D - Dome of Circus

    容易发现,圆锥体积和点的具体x.y坐标无关,只与其到z轴的距离sqrt(x*x+y*y)有关. 于是将这些三维的点都投射到二维的xOy平面的第二象限(sqrt(x*x+y*y),z),求个上凸壳,然后 ...

  7. Java并发包之闭锁/栅栏/信号量(转)

    本文转自http://blog.csdn.net/u010942020/article/details/79352560 感谢作者 一.Java多线程总结: 描述线程的类:Runable和Thread ...

  8. UITabBarController 详解

    // UITabBarController 标签视图控制 // 主要管理没有层级关系的视图控制器 // 1. ViewControllers 所有被管理的视图控制器, 都在这个数组中 // 2. se ...

  9. easyui 后台系统引入富文本编辑器的使用

    1.首先,想在项目中引入相关的jar包 2.html页面中加入相关的引用 <!-- kindeditor --> <script type="text/javascript ...

  10. 【LaTeX】E喵的LaTeX新手入门教程(4)图表

    这里说的不是用LaTeX画图,而是插入已经画好的图片..想看画图可以把滚动条拉到底.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础 ...