`
sun4love
  • 浏览: 226893 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

zk开发中关于forward属性的那点事

    博客分类:
  • zk
阅读更多

一,什么是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(&quot;你好我是参数&quot;)"/>

 

 在事件方法中onSomeEvent(Event event){
       event.getData();//返回传递的参数
 }

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ZK开发手册 ZK开发手册

    ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册

    ZK开发手册(中文教程)

    ZK开发手册(Developer's Guide)的中文翻译版一部分已经公开在zk-devguide 开发手册全部共有14章,超过200页,信息非常齐全: 第1到3章是ZK的简介以及基础构造的说明, 第4,5章介绍组件的周期以及如何处理事件....

    ZK中文开发手册chm

    ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册

    ZK中文开发手册 html

    ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版

    ZK 开发手册(带目录版本)

    ZK 开发手册(带目录版本),详细介绍zk的前台开发和后台数据绑定功能,是zk入门的首选.

    利用myeclipse插件构建zk开发环境

    利用myeclipse插件构建zk开发环境

    ZK开发文档中文HTML版

    ZK中文社区的网页版的开发文档,解决了PDF半文字和图片有些偏差的问题,但是不便于查找关键字了.

    ZK框架开发手册

    ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf

    zk中文人员开发手册.rar

    zk中文人员开发手册是zk入门最佳教材,html格式。

    ZK开发手册3.05

    ZK开发手册 3.05 word版 欢迎使用ZK---- 一种丰富Web应用程序的最简单方式。 此开发手册买描述了ZK的概念和功能。关于如何安装配置ZK的环境,请参阅Quick Start Guide。如果想得到的各个组件(components)的属性和...

    ZK 开发下向导ZK的开发说明

    ZK 开发向导,关于zK的开发说明,中文的哦

    zk开发新闻发布系统

    zk实践战 基于zk开发新闻发布系统,目前在国内很少用zk框架开发,在今后必定是发展的趋势。。

    ZK开发手册(HTML版)

    ZK开发手册,html版 ZK是一个事件驱动(event-driven)的,基于组件(component-based)的,用以丰富网络程序中用户界面的框架。ZK包括一个基于AJAX事件驱动的引擎(engine),一套丰富的XUL和XHTML,以及一种被称为ZUML...

    zk开发全套资料(插件,开发手册,jar包,笔记和程序事例)

    zk开发全套资料,包括插件,开发手册,jar包,还有本人自己写的笔记和初学程序事例.

    zk中文开发手册最新版

    zk中文开发手册,很好很好的,pdf的开发手册

    ajax框架 zk开发手册

    zk是一个流行的ajax框架,此手册适用于开发人员进行参考

    ZK开发手册 CHM格式

    ZK是一套以 AJAX/XUL/Java 为基础的网页应用程式开发框架,用於丰富网页应用程式的使用介面。最大的好处是,在设计AJAX网路应用程式时,轻松简便的操作就像设计桌面程式一样。 ZK包含了一个以AJAX为基础、事件驱动...

    ZK开发手册 CHM版

    ZK开发手册 CHM版, 支持索引、全文检索

    ZK开发手册中文3.5.1版

    新增「整合Spring」 及「整合Hibernate」

    TPC-ZK-II集成开发环境

    TPC-ZK-II微机接口实验系统正是在这种背景下推出的,该设备在TPC-ZK-II微机接口实验系统上配置了USB接口模块,直接与主机(PC)的USB接口连接,形成了一套完整的USB总线接口的微机接口实验系统。

Global site tag (gtag.js) - Google Analytics