事件监听器提交,发送和回显事件

除了接收事件,一个应用程序可以在事件监听器间通信通过向他们发送和提交事件。

提交事件

通过使用org.zkoss.zk.ui.event.Events类中的postEvent方法,应用程序可以将事件提交至事件队列末尾。将事件放到队列中后立即返回。当这个事件之前的所有事件都被处理完毕后,该事件就会被处理。

发送事件

通过使用org.zkoss.zk.ui.event.Events类中的sendEvent方法,应用程序可以请求ZK立即处理指定事件。当指定事件的事件监听器都被处理完毕后才返回。事件是在相同的线程内被处理的。

回显事件

通过使用org.zkoss.zk.ui.event.Events类的echoEvent方法,应用程序可以请求客户端回显稍后要处理的事件。在排列请求客户端回显事件的响应后,该事件会立即返回。

注意,不同于sendEventpostEvent,事件并不会在当前执行过程中被处理,而是在客户端回显事件之后。换句话说,在客户端已更新用户界面之后,事件才会被处理。因此,对于在开始长操作之前提示用户,这是很有用的。

例如,你可以打开一个标示(highlighted)窗口,然后在客户端显示窗口(且回显事件)之后调用echoEvent进行长操作。

例如,在下面的例子中,我们可以使用org.zkoss.zk.ui.util.Clients.showBusy方法来显示繁忙信息,这样用户就知道系统繁忙。然后用户将会看到 "Execute..." ,两秒种之后则是 "Done." 如果我们使用postEvent,最后两秒钟之后用户将会同时看到 "Execute..." 和"Done." 。

<window id="w" title="Test echoEvent">
   <attribute name="onLater">
   Thread.sleep(2000);
   Clients.showBusy(null, false);
   new Label("Done.").setParent(w);
   </attribute>
			
   <button label="echo">
   <attribute name="onClick">
   Clients.showBusy("Execute...", true);
   Events.echoEvent("onLater", w, null);
   </attribute>
   </button>
</window>