`
snoopy7713
  • 浏览: 1167257 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

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行)

 

Java代码 收藏代码
  1. public void onEvent(Event event) {
  2. final Object[] info = (Object[])_auxinf.forwards.get(_orgEvent);
  3. if (info != null )
  4. for (Iterator it = new ArrayList((List)info[ 1 ]).iterator();
  5. it.hasNext();) {
  6. final Object[] fwd = (Object[])it.next();
  7. Component target = resolveForwardTarget(fwd[0 ]);
  8. if (target == null ) {
  9. final IdSpace owner = getSpaceOwner();
  10. if (owner instanceof Component) {
  11. target = (Component)owner;
  12. } else {
  13. //Use the root component instead
  14. for (target = AbstractComponent. this ;;) {
  15. final Component p = target.getParent();
  16. if (p == null )
  17. break ;
  18. target = p;
  19. }
  20. }
  21. }
  22. //bug #2790393 Forward event listener shall be called immediately
  23. //(since 3.6.2) change from postEvent to sendEvent to
  24. //make forward event deterministic
  25. Events.sendEvent(
  26. new ForwardEvent((String)fwd[ 1 ], target, event, fwd[ 2 ]));
  27. }
  28. }

 

 

为了方便理解,我解释一下关键代码的意思,假如转发到的目标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(AJAX开发工具)开发手册

    ##### forward属性 - `forward`属性用于实现页面间的跳转。 - 这使得开发者能够在不同页面间传递参数,并实现导航功能。 ##### 手动创建组件 - 除了通过ZUML定义组件外,还可以手动创建组件。 - 这种方式适用于需要...

    适合初学者的zk开发文档pdf

    ### 知识点详解:适合初学者的ZK开发文档 #### ZK:开发者参考手册概览 ZK是一款开源的、高性能的Web应用程序框架,主要用于构建动态的、丰富的互联网应用(RIA)。它通过组件化的架构,使得开发者能够像编写桌面...

    zk入门.web框架

    **二、ZK开发环境搭建** ZK的开发环境主要涉及JAR包的导入和web.xml的配置。首先,需要将ZK的相关JAR包导入到项目的类路径中。然后,在web.xml中添加ZK的Servlet配置,以便服务器能够识别ZK的应用。 **三、常用...

    zk developeguide3.5.pdf

    ### ZK 开发指南知识点概览 #### 一、引言 - **传统Web应用程序**:介绍了传统Web应用的工作方式,以及与ZK框架的区别。 - **即兴AJAX应用程序**:探讨了早期AJAX应用的特点及其局限性。 - **ZK是什么**:明确了ZK...

    ZK开发者手册.pdf

    通过以上知识点的学习,开发者可以更好地掌握 ZK 的基本用法,并利用这些功能来开发高质量的 RIA 应用程序。ZK 的设计旨在简化 AJAX 的使用,使开发者能够集中精力于业务逻辑而无需过多关注底层实现细节。

    zk框架简单的小实例

    ### ZK框架简介与开发指南 #### 一、引言 ZK框架是Potix公司开发的一款用于构建高性能Web应用程序的开源Java框架。它通过一套丰富的组件库和强大的事件驱动模型,使得开发者能够轻松地创建出高度交互性的用户界面...

    ssh 手动搭建更Happy , 集成jar包 , 详解PPT

    【SSH手动搭建与集成Jar包详解】 ...以上就是关于SSH手动搭建、集成jar包以及ZK开发环境搭建和常用功能的详细解释。通过深入理解这些概念和技术,开发者能够更加熟练地运用SSH和ZK进行Web应用开发。

Global site tag (gtag.js) - Google Analytics