组件(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. leetcode155 Min Stack

    题意:模拟一个最小栈,可以push,pop,top,和返回栈中最小值. 思路:已经忘了栈是怎么构建的了,晕···尝试了半天,错误,发现直接用stack数据结构来做最方便,再用一个栈来存最小值.值得注意 ...

  2. Ubuntu 16.04LTS 常用软件安装

    一.遇到的问题 1.su认证失败 sudo passwd //输入命令,然后修改密码即可 2.移动启动器 gsettings set com.canonical.Unity.Launcher laun ...

  3. 【BZOJ 1036】【ZJOI 2008】树的统计Count

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 复习了一下好写好调的lct模板啦啦啦--- #include<cstdio> #i ...

  4. 【BZOJ 4650】【UOJ #219】【NOI 2016】优秀的拆分

    http://www.lydsy.com/JudgeOnline/problem.php?id=4650 http://uoj.ac/problem/219 这里有非常好的题解qwq 接着道题复习一下 ...

  5. qsc round#2 喵哈哈村的排队(本辣鸡想七想八的,特写此博文给自己一个提醒)

    该oj是qsc自己写的比赛,友情链接:http://qscoj.cn/ 喵哈哈村的排队 发布时间: 2017年2月26日 16:13   最后更新: 2017年2月26日 16:14   时间限制: ...

  6. Codeforces 804D Expected diameter of a tree(树形DP+期望)

    [题目链接] http://codeforces.com/contest/804/problem/D [题目大意] 给你一个森林,每次询问给出u,v, 从u所在连通块中随机选出一个点与v所在连通块中随 ...

  7. BZOJ 2697 特技飞行(贪心)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2697 [题目大意] 神犇航空开展了一项载客特技飞行业务. 每次飞行长N个单位时间,每个 ...

  8. 【map】【分解质因数】CDOJ1572 Espec1al Triple

    先把公比为1,即前项 中项 末项相同的统计出来.对每一类数C(n,3)即可. 然后我们发现,因为a1*a3=(a2)^2,所以a1和a3进行质因子分解之后,每一个质因子的指数的奇偶性必然相同,否则无法 ...

  9. [Winform]线程间操作无效,从不是创建控件的线程访问它的几个解决方案,async和await?

    目录 概述 取消跨线程检查 使用委托异步调用 sync和await 总结 概述 最近在qq群里有一朋友,问起在winform中怎么通过开启线程的方式去处理耗时的操作,比如,查看某个目录下所有的文件,或 ...

  10. Oracle SQL执行缓慢的原因以及解决方案

     以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中 ...