锁定老帖子 主题:zk开发中关于forward属性的那点事
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-26
最后修改:2011-02-22
一,什么是forward
forward属性是zk提供的一个事件转发特性,
forward属性可以定义为如下格式
1#,forward="target_event_expr" 2#,forward="oringal_event=target_event_expr"
1.1-----如果未指定oringal_event原始事件,默认为onClick事件
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的目标是谁?
在上例子中
在这两个例子中,都不属于以下类型,以下三种都指定了目标组件
1#,target-id.event-name 2#,id1/id2/id3.event-name 3#,${el-expr}.event-name
在zk的组件创建阶段,组件创建完毕后,有这么一段代码
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
四,传递参数
2,forward="oringal_event=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})"/>
在事件方法中onSomeEvent(Event event){
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2188 次