一,什么是forward
forward属性是zk提供的一个事件转发特性,
该特性将自身的某个原始事件转发到指定的目标组件上
或者将自身的onClick事件转发给另外一个事件
二,forwrd的格式
forward属性可以定义为如下格式
1#,forward="target_event_expr"
2#,forward="oringal_event=target_event_expr"
1.1-----如果未指定oringal_event原始事件,默认为onClick事件
所以第1种的完整写法是forward="onClick=target_event_expr",
1.2-----第二种格式,你可以随意定义原始事件
例如:<button forward="onMouseOver=onSavePosition"/>
<button forward="onBlur=targetId.onClick"/>
第二种方式是一个通用格式,但大部分情况下我们使用的是onClick事件,
所以提供了格式1,方便我们的开发
1.2.1------target_event_expr是一个表达式,这个表达式也有几种写法:
1#,event-name
2#,target-id.event-name
3#,id1/id2/id3.event-name
4#,${el-expr}.event-name
三,forward的目标是谁?
在上例子中
<button forward="onMouseOver=onSavePosition"/>
onSavePosition是谁的事件呢?
而<button forward="onSavePosition"/>中onSavePosition事件又是谁的呢?
在这两个例子中,都不属于以下类型,以下三种都指定了目标组件
1#,target-id.event-name
2#,id1/id2/id3.event-name
3#,${el-expr}.event-name
event-name前未指定目标组件,那么zk如何处理???
在zk的组件创建阶段,组件创建完毕后,有这么一段代码
ComponentsCtrl.applyForward(child, childInfo.getForward());(zk5.0.6 UiEngineImpl 743行)
该代码的作用是应用forward表达式,创建EventListener监听器,由此我们还可以知道forward其实
与comp.addEventListener差不多的
然后我们找,找到我们感兴趣的代码,
然后我找到了AbstractComponent的ForwardEventListener
的onEvent方法(zk5.0.6 AbstractComponent 2973行)
public void onEvent(Event event) {
final Object[] info = (Object[])_auxinf.forwards.get(_orgEvent);
if (info != null)
for (Iterator it = new ArrayList((List)info[1]).iterator();
it.hasNext();) {
final Object[] fwd = (Object[])it.next();
Component target = resolveForwardTarget(fwd[0]);
if (target == null) {
final IdSpace owner = getSpaceOwner();
if (owner instanceof Component) {
target = (Component)owner;
} else {
//Use the root component instead
for (target = AbstractComponent.this;;) {
final Component p = target.getParent();
if (p == null)
break;
target = p;
}
}
}
//bug #2790393 Forward event listener shall be called immediately
//(since 3.6.2) change from postEvent to sendEvent to
//make forward event deterministic
Events.sendEvent(
new ForwardEvent((String)fwd[1], target, event, fwd[2]));
}
}
为了方便理解,我解释一下关键代码的意思,假如转发到的目标target组件为空,首先检测该组件的所属命
名空间是否为一个组件, 如果是一个组件类型,那么设置该命名空间为目标组件,反之将循环迭代获取,直至获取该组件的根组件,即root component
那么上面我们产生的疑问就豁然开朗了,
那么实际开发中我们需要注意什么
1,首先在mvc模式开发中,controller(use或apply指定的类)最好建立在forward组件所属的命名空间上
2,如果没有命名空间,那么将controller(use或apply指定的类)放在root component
四,传递参数
1,forward="target_event_expr"
2,forward="oringal_event=target_event_expr"
其中target_event_expr目标事件表达式,有四个类型
1#,event-name
2#,target-id.event-name
3#,id1/id2/id3.event-name
4#,${el-expr}.event-name
这四种类型的event-name也可以使用()号,像方法一样也可以有参数,这个参数可以是el表达式,
a,<button forward="onSomeEvent(${2+2})"/>
b,<label id="compId"/><button forward="onBlur=onSomeEvent(compId)"/>
b,<button forward="onBlur=compId.onSomeEvent("你好我是参数")"/>
在事件方法中onSomeEvent(Event event){
event.getData();//返回传递的参数
}
分享到:
相关推荐
ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册
ZK开发手册(Developer's Guide)的中文翻译版一部分已经公开在zk-devguide 开发手册全部共有14章,超过200页,信息非常齐全: 第1到3章是ZK的简介以及基础构造的说明, 第4,5章介绍组件的周期以及如何处理事件....
ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册
ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版
ZK 开发手册(带目录版本),详细介绍zk的前台开发和后台数据绑定功能,是zk入门的首选.
利用myeclipse插件构建zk开发环境
ZK中文社区的网页版的开发文档,解决了PDF半文字和图片有些偏差的问题,但是不便于查找关键字了.
ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf
zk中文人员开发手册是zk入门最佳教材,html格式。
ZK开发手册 3.05 word版 欢迎使用ZK---- 一种丰富Web应用程序的最简单方式。 此开发手册买描述了ZK的概念和功能。关于如何安装配置ZK的环境,请参阅Quick Start Guide。如果想得到的各个组件(components)的属性和...
ZK 开发向导,关于zK的开发说明,中文的哦
zk实践战 基于zk开发新闻发布系统,目前在国内很少用zk框架开发,在今后必定是发展的趋势。。
ZK开发手册,html版 ZK是一个事件驱动(event-driven)的,基于组件(component-based)的,用以丰富网络程序中用户界面的框架。ZK包括一个基于AJAX事件驱动的引擎(engine),一套丰富的XUL和XHTML,以及一种被称为ZUML...
zk开发全套资料,包括插件,开发手册,jar包,还有本人自己写的笔记和初学程序事例.
zk中文开发手册,很好很好的,pdf的开发手册
zk是一个流行的ajax框架,此手册适用于开发人员进行参考
ZK是一套以 AJAX/XUL/Java 为基础的网页应用程式开发框架,用於丰富网页应用程式的使用介面。最大的好处是,在设计AJAX网路应用程式时,轻松简便的操作就像设计桌面程式一样。 ZK包含了一个以AJAX为基础、事件驱动...
ZK开发手册 CHM版, 支持索引、全文检索
新增「整合Spring」 及「整合Hibernate」
TPC-ZK-II微机接口实验系统正是在这种背景下推出的,该设备在TPC-ZK-II微机接口实验系统上配置了USB接口模块,直接与主机(PC)的USB接口连接,形成了一套完整的USB总线接口的微机接口实验系统。