1、 ZK是什么,不是什么?
ZK是事件驱动的,基于组件的框架,为web应用程序提供了富客户端接口。它包含基于Ajax的事件驱动引擎,大量的XUL与XHTML组件以及被称为ZUML(ZK User Interface Language)的标记语言。
Zk不提供类似RMI以及其它API那样的通道让开发者在客户端与服务器之间交互,这是因为所有的代码都运行在服务器上,ZK封装了客户端与服务器端进行通信的细节,使得这些细节对于开发者来说是透明的。
ZK不强迫开发者使用MVC或者其它的设计模式,是否使用是开发者的自由。作为一种框架,ZK的目标不是把XUL带进web应用程序,它的目标是把桌面编程的模型带进web应用程序,现在它支持XUL和XHTML,但不排除将来支持XAML、XQuery或别的东西的可能性。
2、 ZK当中的基本概念
在ZUML页面中,一个XML元素描述了一个将要被创建的组件,例如:<window title=”Hello World”/>是一个窗口(org.zkoss.zul.Window)。
嵌套在ZUML页面中的代码可以用不同的语言编写,包括但不仅限于Java、Javascript、Ruby以及Groovy,最重要的是它们运行在服务器上。
<zscript>元素只在页面被载入时被计算一次,它通常被用于定义方法和初始化变量。
关于脚本语言,ZK默认的脚本语言是Java,但是我们可以通过language选择使用其它的脚本语言,此属性对值的大小写不敏感。例如:
<zscript language=”javascript”> alert(“Hello World!”); </zscript>
让脚本代码在单独的文件中:<zscript src=”……”/>
<attribute/>是一个特殊的XML元素,它以元素的形式定义了一个XML属性,在某些情况下,使用它可以使得代码具有更好的可读性。
If和unless属性用于控制是否创建一个组件。
3、 ZK的体系结构
ZK架构的主要元素:一种基于Ajax的机制用于实现自动的交互性(包括zk加载器、zk AU引擎、zk客户端引擎),一套丰富的基于XML的组件用于丰富可用性,一种标记语言用以简化开发。
基于用户的请求,zk加载器加载zk页面,解释它,然后将响应结果作为HTML页面返回给请求的用户。Zk页面是用ZUML书写的,它就像HTML一样被用于描述什么组件将被创建以及如何展现这些组件,这些组件一旦被创建就保持可见直至Session超时。
Zk AU引擎与ZK客户端引擎是互相配合工作的,他们把在浏览器端发生的事件传递到服务器,并更新浏览器端的DOM树,此更新依据应用程序对组件的操作,这也就是事件驱动的编程模型。
4、 组件、页面、桌面
组件是一个UI对象,例如标签、按钮或者树,它定义了特定用户接口的展现和行为,通过操作这些组件,开发者就能控制如何把应用程序展现给客户端。
页面是大量组件的集合,页面被ZK加载器通过解释ZUML页面自动创建。
一个ZUML页面可能直接或间接包含其它的页面,因为这些页面是由相同的URL请求创建的,故而把它们通称为桌面,换句话说桌面是服务于同一URL请求的大量页面的集合。
注意:页面和桌面都是被隐式创建的,没有任何API可以创建或者清除它们。
关于视觉部分和Java对象:除了在服务器端有一个Java对象外,一个组件在浏览器端还会有一个视觉部分(即一个DOM元素或者一组DOM元素的集合),当然前提是组件被加入到页面中。在大多数情况下,开发人员只需操纵服务器端的对象,视觉部分的创建、更新、删除是由ZK自动完成的。