1.3 开发组件三部曲(Trilogy of Component Development )
从开发的角度看,实现一个组件有三步:第一,你需要设计展现层;第二,你必须在服务器端实现以java 类形式存在的句柄。最后,你需要用xml 文件对它们进行配置使它能被应用程序访问。
如何实现展现层取决于客户端的技术,例如,ajax 浏览器采用的是html 标记语言和js 代码,而java 手机客户端采用的是Java MIDlet 技术。出于描述的方便,我们在指南中重点放到了ajax 浏览器。下面的图说名了它们之间的关系。
1.3.1 开发展现层Development of View
对于ajax 浏览器,组件的展现层是基于HTML 标签和有选择性的JavaScript 方法。HTML tags 用于可视化的展现,而JavaScript 方法用于初始化、清除、监听浏览器事件和服务器交互。
HTML 标记 (HTML Tags )
对于ajax 浏览器,可视化展现是由一系列的HTML 标记语言实现的。例如,你想用HTML 的BUUTON 标记去代表一个组件,那么表面的设计可能是这个样的:
Xml 代码
<BUTTON id="z_ed_0" z.type="mycomps.MyButton">I am a button</BUTTON>
<BUTTON id="z_ed_0" z.type="mycomps.MyButton">I am a button</BUTTON>
在这里,z_ed_0 是组件的UUID (该属性是zk 加载器分配 的),z.type 是一个特殊属性用来代表组件的类型。可视化展现层被浏览器解析并运行在浏览器端,然而,它们却是在服务器端生成的,生成时 redraw() 方法被调用。所有的东西都被写在writer argument 这个参数中传递给redraw() 方法后发送给客户端的。为了实现redraw() 方法,你可以通过继承 AbstractComponent 类或它的衍生类来实现,而不需要你自己直接去实现。你可以用你喜欢的Servlet 技术去实现所谓的模板,例如DSP ,JSP 等等。出于描述方便的考虑,我们在这个指南中主要应用DSP 。关于采用Java Servlet 技术,你可以用一个叫组件渲染器的类去实现(即org.zkoss.zk.ui.util.ComponentRenderer )。它的可读性可能比较困难,但执行效率很好。我们在文章的下边会讲到它。
JavaScript 方法(JavaScript Methods )
除了继承一个简单的组件外,你通常需要提供一些JavaScript 代码,用来与用户进行交互、操作HTML 标签和与服务器交互。JavaScript 代 码根据它们的目的不同可以分组为单个的方法。例如,在客户端,你想在组件的初始化中注册一个事件监听器,那么它对应的JavaScript 代码可能是这样 的:
Js 代码
zkMyButton.init = function (cmp) {
zk.listen(cmp, "click", function (evt) {/*my listener*/});
};
zkMyButton.init = function (cmp) {
zk.listen(cmp, "click", function (evt) {/*my listener*/});
};
在这里,方法的名字是由组件类型决定的,同时名字也决定了何时被调用。在这个例子中,按钮的z.type 是mycomps.MyButton (关于 z.type 属性具体说明在上面有描述)。它表示调用的JavaScript 代码是存储在/web/js/mycomps.js. 这个 JavaScript 文件中的(注意该文件必须存放在可被类加载器加载的位置)。它的组件类型是MyButton 。如果我们想让它在初始化的时候执行,那 么方法的名字必须是zkMyButton.init
(= "zk" + "Type" + ".when"). 类似的, 如果你想在浏览器重新设置大小的时候调用,那么这个方法的名字将是zkMyButton.onSize. 在后面我们会对它做更多的解释。
1.3.2 句柄的开发(Development of Handle )
句柄是组件中可被web 应用程序访问的状态和API ,更确切地说,它是实现org.zkoss.zk.ui.Component 接口的一个java 类。一般你不需要直接实现这个接口,你可根据需求,从已存在的类中继承,这些存在的类象
org.zkoss.zk.ui.AbstractComponent, org.zkoss.zk.ui.HtmlBasedComponent, and
org.zkoss.zul.XulComponent. 例如,你想扩展AbstractComponent 的主要实现,java 类的实现可能是这样的:
public MyButton extends AbstractComponent { }
如果你是扩展一些主要应用的实现,除了组件指定的方法外,基本不存在你要实现的抽象类。
1.3.3 配置(Configuration )
一旦你实现了展现层和句柄,你可以在xml 文件中说明该组件,以便zk 能加载它,应用程序能用它。这个配置文件叫lang-addon.xml. 在工程中有两个地方你可以放置该文件,一个是在/metainfo/zk 目录下,这种是通过类的路径存储的(一般是jar 文件的一部分)。另一种方法是在web 应用程序中(作为war 文件的一部分)通过在/WEB-INF/zk.xml 中指定正确的路径。
假设我们展现层的是/web/myaddon/button.dsp ,句柄是com.myaddon.MyButton 类,那么让我们看一下配置应该是这样的:
Xml 代码
<language-addon>
<addon-name>myAddon</addon-name>
<language-name>xul/html</language-name>
<component>
<component-name>mybutton</component-name>
<component-class>com.myaddon.MyButton</component-class>
<mold>
<mold-name>default</mold-name>
<mold-uri>~./web/myaddon/button.dsp</mold-uri>
</mold>
</component>
</language-addon>
<language-addon>
<addon-name>myAddon</addon-name>
<language-name>xul/html</language-name>
<component>
<component-name>mybutton</component-name>
<component-class>com.myaddon.MyButton</component-class>
<mold>
<mold-name>default</mold-name>
<mold-uri>~./web/myaddon/button.dsp</mold-uri>
</mold>
</component>
</language-addon>
正如上面展现的一样,每一个lang-addon.xml 必须指定一个唯一的名字(addon-name) 和它属于的语言(language- name) 。每个组件定义必须指定组件的名字(component-name )、句柄 (component-class) 和展现 (mold). 每个组件可以有多个表现层,每个表现层都有一个名字(mold-name )。默认的模板名字是default ,该模板必须有(除非你想直接 继承redraw 方法)。
分享到:
相关推荐
《TPC-ZK-II集成开发环境(64位)》是一款专为微机程序设计而打造的高效开发工具,尤其适合中文用户使用。在这款64位版本的集成开发环境中,用户可以进行高效的编程、调试以及项目管理,极大地提升了开发效率和编程...
TPC-ZK-II微机接口实验系统正是在这种背景下推出的,该设备在TPC-ZK-II微机接口实验系统上配置了USB接口模块,直接与主机(PC)的USB接口连接,形成了一套完整的USB总线接口的微机接口实验系统。
zk-6.5.0.zip ZK 6.5.0 Sep 12, 2012 * Features ZK-447: The file upload allows users to drag and drop local files (HTML5) ZK-1241: ZK Client Widget support swipe event for tablet/mobile device ZK-...
【Zkteco中控智慧信息屏设备ZK-S1007用户手册】是一份详细的指导文档,旨在帮助用户充分理解和操作中控智慧的ZK-S1007信息屏设备。这款设备集成了先进的生物识别技术和多媒体展示功能,常用于办公、教育、商业等场所...
总的来说,"zk-bin-7.0.2.zip"是一个用于构建富客户端Web应用的ZK框架二进制包,它提供了丰富的UI组件和数据可视化功能,适用于需要交互式用户界面和图表展示的项目。通过学习和使用ZK,开发者可以更高效地开发出...
标题中的"zk-src-6.0.1.zip_zk_zk_java_zk-src-6.5.1.1"指的是ZK框架的源代码压缩包,包含版本6.0.1和6.5.1.1。ZK是一个基于Java开发的用户界面框架,专门用于构建富Web应用。这里提到了两个版本的源代码,意味着...
TPC-ZK-II集成开发环境.exe
ZK-bin包文件是ZooKeeper的可执行文件集合,包含了运行ZooKeeper服务所需的所有必要组件。在Eclipse环境中部署ZK-bin包,可以方便地进行开发和测试工作。 首先,了解ZooKeeper的核心概念: 1. **节点(Znode)**:...
中控智慧设备说明书
在“zk-bin-3.6.1”的压缩包内,我们可以预期找到以下关键组件: 1. `bin`目录:包含启动和停止ZooKeeper服务器的脚本,如`zkServer.sh`(在Unix/Linux系统上)和`zkServer.cmd`(在Windows系统上)。 2. `conf`...
Go-zk-sniffer就是这样一款基于Golang开发的工具,专门用于嗅探和解析ZooKeeper的数据包,为开发者提供了一种深入洞察ZooKeeper网络通信的途径。 首先,我们来了解下ZooKeeper的主要功能。ZooKeeper是一个分布式的...
【标题】"zk-bin-5.0.0-RC.zip_DEMO_fckez.jar_zk_zk demo_zk-demo-5.0.z" 暗示这是一个关于Zookeeper的演示项目,版本为5.0.0-RC。其中包含了一个名为`fckez.jar`的应用程序,以及与Zookeeper(zk)相关的示例代码...
【标题】"zk-bin-3.6.2.zip_zk_zk version 3_zk-bin-5.0.2" 涉及到的是ZooKeeper的两个不同版本,即3.6.2和5.0.2。ZooKeeper是一个分布式协调服务,广泛应用于大数据和分布式计算系统中,如Hadoop、HBase等。它提供...
在本压缩包"zk-bin-6.5.3.zip"中,包含的是ZK的最新版本6.5.3的二进制发行版。 在ZK的开发过程中,开发者通常会依赖ZK提供的jar包来构建和运行分布式应用。这些jar包包含了ZK的客户端和服务端的所有必需组件,使得...
标题中的"zk-bin-7.0.3.zip"指的是ZooKeeper的一个特定版本,即7.0.3的二进制发行版。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的必备组件,可以提供诸如命名服务、配置管理、集群同步...
ZK 8.0.0端参考 ZK 8.0.0组件开发的必需品 ZK 8.0.0组件引用 ZK 8.0.0配置参考 ZK 8.0.0开发人员的参考 ZK 8.0.0风格定制指南 ZK 8.0.0 ZUML参考 zk-mvvm-book
zk-smoketest, zk smoketest.py 为ZooKeeper集成提供了一个简单的smoketest客户端 ZooKeeper Smoketest作者:Patrick ( 请关注我的 Twitter )摘要这个项目提供了一个简单的客户端,用于一个ZooKeeper集成。...
### SMC ZK2-ZSEA-A 设置方法详解 #### 一、产品概述 SMC ZK2-ZSEA-A是一款带有节能功能的真空发生器,它采用数字式压力开关技术,适用于各种工业自动化应用场景。该型号的产品能够有效提高真空系统的效率,并具备...
《深入理解Node.js ZooKeeper浏览器:node-zk-browser-master》 在现代分布式系统中,ZooKeeper是一个不可或缺的组件,它作为一个高可用的分布式协调服务,为数据存储、配置管理、命名服务等提供了强有力的支持。而...