zk框架之Event Handling

event是用来抽象事件的,在这里我们将讨论怎么去操纵event,比如说listening,posting,forwarding

 

Event Listening

有两种方式可以监听事件:Event Hanler and Event Listener。

 

Listen by use of an Event Handler

我们可以在zk page中将handler指定为一个属性或者在scr中写一个component class

<button onClick="alert('hello world')"></button>

重要的内置变量:

self - 接收event的组件,在这个例子中就是接收onClick事件的button

event - 被接收的时间,在这个例子中就是MouseEvent的实例

它有优点和缺点:

Advantage:

1、改变代码无需重新编译和重新加载应用;

2、如果代码少的话是容易维护的

Disadvantage:

1、运行速度慢;

2、编译错误不能被提前发现;

3、在ui中混杂事务处理代码是难以维护的

 

Declare an Event Handler in java

我们可以用java代码的方式来实现:

public class MyButton extends Button{

public void onClick(){

Messagebox.show("hello "+event.getName());

}

}

用java代码的方式实现event handler,官方建议是在组件开发时用,因为对开发人员来说,它是隐含的。

 

Listen by Use of an Event Listener

event listener实现自EventListener

 

 

public class MyListener implements EventListener{

@Override

public void onEvent(Event event) throws Exception {

Messagebox.show("hello world");

}

}

 

btn.addEventListener("onClick",new MyListener());

 

但是如果组件很多的时候,这样人工一个一个添加Listener是很麻烦的,因此zk提供了一种可以自动根据id连线的方式来监听:

 

public class MyComposer extends GenericForwardComposer{

private static final long serialVersionUID = -6441175297617827574L;

public void onClick$hi(){

try {

Messagebox.show("hello");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

public void onClick$bye(){

try {

Messagebox.show("goog bye");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

public void onOK(){

try {

Messagebox.show("ok pressed");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

然后再页面中,我们可以为window添加apply属性

 

<?page title="new page title" contentType="text/html;charset=UTF-8"?>

<zk>

<window title="new page title" border="normal" apply="com.jing.zk.MyComposer">

<textbox/>

<button id="hi" label="hi"></button>

<button id="bye" label="bye"></button>

</window>

</zk>

 

如果要讲Listener延迟,需要同时实现EventListener和Deferrable,当将一个listener延迟后,就算这个监听器已经在页面中注册,但是也不会马上返回服务器,只有当另一个non-deferrable的listener到来时,才回跟随它一起返回,而且是有顺序的。

当我们为page添加listener的情况下,都是延迟的,无论是否实现了deferrable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值