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

    ZK开发手册中文3.5.1版

    首先,关于ZK框架的基础知识,ZK的核心理念是将UI设计与业务逻辑分离,通过事件驱动的模型简化Web应用的开发。它的组件模型使得开发者可以像操作桌面应用一样操作Web界面,提供了丰富的预定义组件,如按钮、表格、树...

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

    通过在MyEclipse中安装和配置相应的zk插件,开发者可以便捷地搭建zk开发环境,进行zk应用的开发和调试。 【标签】:eclipse(MyEclipse是Eclipse的一个商业版本)、zk(ZooKeeper)、插件 【详细知识点】: 1. **...

    ZK中文开发手册chm

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

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

    ZK的开发手册提供了必要的基础知识和指导,使得开发者能够快速掌握ZK框架,并有效地应用于实际项目中。通过使用ZK,开发者可以更加专注于业务逻辑的实现和前端用户体验的设计,从而提高整体的开发效率和产品质量。

    ZK开发文档中文HTML版

    在这个"ZK开发文档中文HTML版"中,你将找到关于如何使用ZK框架进行开发的详细指南。 首先,文档会介绍ZK的基本概念,包括组件系统、事件处理和布局管理。ZK的组件库丰富,涵盖了各种常见的UI元素,如按钮、表格、树...

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

    这套zk开发全套资料包含了ZK开发所需的多个重要组成部分,下面将逐一详细介绍这些资源及其在ZK开发中的作用。 1. **插件**:ZK的插件可以扩展其功能,例如数据绑定、图表生成、报表工具等。开发者可能需要使用这些...

    ajax框架 zk开发手册

    《ZK开发手册》是ZK框架的官方文档,详细介绍了ZK的使用方法、组件、API、事件处理、集成策略等内容,是开发者学习和解决问题的重要参考资料。阅读该手册,可以帮助开发人员更好地理解和运用ZK框架,提高开发效率,...

    ZK中文开发手册 html

    **ZK中文开发手册**是针对ZK框架的详尽指南,旨在帮助开发者更好地理解和使用这一强大的组件库和事件驱动的Java应用框架。ZK框架主要用于构建富客户端Web应用程序,它提供了一种简单的方式来创建交互式的用户界面,...

    zk中文开发手册pdf版(基于3.5.1)

    在《ZK开发者指南》中,你将找到以下关键知识点: 1. **安装和配置**:手册会指导你如何设置开发环境,包括JDK、Maven或Gradle的安装,以及ZK的依赖配置。 2. **组件使用**:书中详细介绍了各种组件的属性、事件和...

    ZK框架:Ajax开发实战

    文件提供的信息中关于股票的基本概念、特征和作用,虽然和标题“ZK框架:Ajax开发实战”不直接相关,但通过提取和整合其中的股票知识,我们可以更全面地理解股票市场的基本运作机制,这对于培养投资意识和财务知识也...

    zk中文人员开发手册.rar

    **ZK 开发手册中文版概述** ZK 是一个基于组件的 Java Web 用户界面框架,专为构建富互联网应用程序(RIA)而设计。它提供了一种简单、直观的方式来创建交互式用户界面,无需掌握复杂的 JavaScript 或 AJAX 技术。...

    ZK框架开发手册

    ZK框架是一款用于Web开发的开源富客户端框架...整体来说,ZK框架开发手册中涵盖了从基础架构到高级功能的广泛知识点,为开发者提供了一套完整的Web应用开发工具包,让开发者能够快速构建功能强大、响应迅速的Web应用。

    ZK4500SDK包 ZK4500、中控指纹仪、SDK开发包带各种语言的demo

    ZK4500SDK是中控科技针对其ZK4500指纹仪推出的一款开发包,旨在帮助开发者高效地集成指纹识别功能到自己的系统或应用中。本文将详细介绍ZK4500SDK的主要内容及其在不同语言环境下的应用。 首先,ZK4500是一款高性能...

    ZK安装 ZK入门 开发 讲解 共3个pdf

    首先,"ZK-Studio_userguide.pdf"是关于ZK Studio的用户指南,ZK Studio是ZK提供的一个集成开发环境,用于简化ZK应用的创建、调试和部署过程。该文档将详细介绍如何安装和配置ZK Studio,以及如何使用其各种功能,如...

    zk 开发依赖包

    下面,我们将详细探讨这些包的作用以及它们在ZK开发中的重要性。 1. **ckez.jar**:这个文件可能包含了ZK的某些特定功能或者组件,可能是一个扩展或插件,具体用途需要查看其源代码或文档来确定。 2. **zul.jar**...

Global site tag (gtag.js) - Google Analytics