-
FEATURED COMPONENTS
First time here? Check out the FAQ!
根据Developers Guide的第5章的Add and Remove Event Listeners to Pages Dynamically小节:
Developers could add event listeners to a page (org.zkoss.zk.ui.Page) dynamically. Once added, all events of the specified name the are sent to any components of the specified page will be sent to the listener.
但是我试了却不行,根据源代码来看,似乎也不可以。不知道大家是否可以,还是文档没有及时更新?
附:我是ZK新手:)
Hi zik
我刚才测试了,page的确可以监听到其中组件的事件。
代码如下:
index.zul
<zk> <window id="win" apply="Comps.Index"> <button id="download" label="download"/> </window> </zk>
public class Index extends GenericForwardComposer { public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); Page page = (Page) Executions.getCurrent().getDesktop().getPages().iterator().next(); page.addEventListener("onClick", new Listener()); } class Listener implements org.zkoss.zk.ui.event.EventListener{ public void onEvent(Event event) throws Exception { alert("123"); } } }
谢谢adam4891288的回复,你的代码我试了,确实可以。不过仍然有一些疑问,我将代码改为如下:
index.zul
<zk> <window id="win" apply="Comps.Index"> <button id="download" label="download"/> <tree> <treechildren> <treeitem label="XXX"> </treeitem> <treeitem label="YYY"> </treeitem> </treechildren> </tree> </window> </zk>
Index.java
public class Index extends GenericForwardComposer { public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); Page page = (Page) Executions.getCurrent().getDesktop().getPages().iterator().next(); page.addEventListener("onClick", new Listener()); page.addEventListener("onSelect", new Listener2()); } class Listener implements org.zkoss.zk.ui.event.EventListener{ @Override public void onEvent(Event event) throws Exception { alert("123"); } } class Listener2 implements org.zkoss.zk.ui.event.EventListener{ @Override public void onEvent(Event event) throws Exception { alert("456"); } } }
这样的话,如果点击树的Item时发出的OnSelect Event是不会立即触发监听器的,而是在onClick事件触发后,才会跟着触发OnSelect事件,这是为什么?谢谢!
Hi zik
的确如你所说,onSelect事件触发后只是作为一个类似于缓存队列的事件队列存在,而不执行监听器内的方法,只有当onClick事件触发后才一并按顺序执行。
针对此问题我又测试了多种事件,例如onChange,onChanging,onPaging等等,发现这些事件的行为都是不甚相同的。例如onPaging就类似于onClick可以立即监听到,但是却一下子执行两次监听器的onEvent方法。而onChange则类似于onSelect,要onClick或者onPaging这样的事件触发后才会触发,而onChanging干脆就监听不到。
当然,这究竟是为什么,我也不得而知,因为我也没有深入研究ZK的源码,估计还是里面的事件传输机制造成的。我也希望得到本论坛的技术专家的解答。
如果不用 treeitem 改成 treecell 呢
经测试treeitem与treecell效果一样,因为onSelect是在tree里监听的
Asked: 2009-11-23 05:42:12 +0800
Seen: 458 times
Last updated: Nov 24 '09