除了接收事件,一个应用程序可以在事件监听器间通信通过向他们发送和提交事件。
通过使用org.zkoss.zk.ui.event.Events
类中的postEvent
方法,应用程序可以将事件提交至事件队列末尾。将事件放到队列中后立即返回。当这个事件之前的所有事件都被处理完毕后,该事件就会被处理。
通过使用org.zkoss.zk.ui.event.Events
类中的sendEvent
方法,应用程序可以请求ZK立即处理指定事件。当指定事件的事件监听器都被处理完毕后才返回。事件是在相同的线程内被处理的。
通过使用org.zkoss.zk.ui.event.Events
类的echoEvent
方法,应用程序可以请求客户端回显稍后要处理的事件。在排列请求客户端回显事件的响应后,该事件会立即返回。
注意,不同于sendEvent
和postEvent
,事件并不会在当前执行过程中被处理,而是在客户端回显事件之后。换句话说,在客户端已更新用户界面之后,事件才会被处理。因此,对于在开始长操作之前提示用户,这是很有用的。
例如,你可以打开一个标示(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>