ZK组件开发向导翻译(一)介绍

声明:本文译自ZK官方文档,由于本人水平所限,可能会与原文的真实意思有所出入。

一、组件的两端.

一个组件包含两个部分:视图和处理器。这就像一枚硬币的两面一样,视图是组件的视觉部分,它运行在浏览器端并且与用户交互;处理器是运行在服务器端的Java对象,与应用程序交互。

组件的两端 

 视图是一个组件的视觉部分,也就是用户所能看到的那一部分。当组件被创建完成并且附加到页面上之后,它的视图就在客户端被创建。例如当应用程序在服务器端创建一个Button的时候,这个按钮的视图就会相应地在客户端创建,因此用户就能点击它了。

处理器是运行在服务器端的Java对象,它持有应用程序所能访问的所有状态和API,从应用程序的观点来看,它所能访问的就是Java对象。换句话说,应用程序不通过Internet与用户直接交互,相反,应用程序与Java对象(组件)对话而Java对象相应地更新自己的视觉部分。类似地,如果用户在视图部分做了一些操作(比如点击一个按钮),更新Java对象以及通知应用程序是组件的责任。

应用程序不需要了解与Ajax、Java Mobile、Flash有关的任何知识,客户端与服务器端的通信细节被封装在组件的实现中。

二、页面和响应.

当一个组件被创建的时候(例如:new Button()),它不属于任何页面,进一步说,如果组件不属于任何页面,那么它在客户端也就不存在视图,这也意味着这个时候对组件的任何更新都不会对客户端产生影响;另一方面,一旦一个组件属于一个页面,那么对它的任何更新都会相应地引起视图的更改。

为了获得最好的性能,当组件被更改时ZK不会立即更新客户端的视图,相反,它积累所有的更新、并对它们进行优化,在最后的处理阶段发送一个最小的更新集合到客户端,最后的处理阶段被称为响应阶段。

从应用程序的角度看,ZK加载页面的生命周期分为四个阶段:页面初始化阶段、组件创建阶段、事件处理阶段以及响应阶段。但是从组件的角度来看,除了响应阶段之外的其它三个阶段都是相同的,所以可以简单地把这一过程分为非响应阶段和响应阶段。

在非响应阶段,ZK允许应用程序访问除了redraw方法之外的组件的任何方法,组件负责通知ZK它本身是否需要被重绘,以及它的视图的某些状态是否需要修改。

例如,如果你有一个方法会引起客户端重绘组件的视图,那么你可以调用invalidate方法:

public class MyComp extends org.zkoss.zk.ui.AbstractComponent {
	public void setValue(String value) {
		_value = value;
		invalidate();
	}
}

 对invalidate方法的调用会通知ZK组件在响应阶段需要被重绘,但是ZK不会对组件进行立即重绘,相反,ZK累计这些更新并且在稍后的响应阶段一并处理它们。

在所有的事件都被处理完成之后,ZK开始启动响应阶段以便重绘那些在其他阶段被置为无效的组件,换句话说,如果组件的invalidate方法被调用过,ZK将会在响应阶段调用redraw方法重绘整个组件。在响应阶段除了redraw方法之外的组件的其它方法均不应该被调用。

未完待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值