了解dispatchEvent(evt.clone())

时间:2013-08-01 05:27:03

标签: actionscript-3 flex flash-builder

我是动作脚本的新手,并尝试理解现有代码。在这里,我有MyRestServiceEvent和MyRestService。 MyRestService类中定义了许多方法来分派许多事件,但有些方法实现了dispatchEvent(evt.clone());,这是我无法理解的。我知道MyRestServiceEvent已经实现了clone(),那么这个dispatchEvent(evt.clone());做了什么?如果有人能解释我的过程,我真的很感激。

下面是这两个类的一点点。

  

事件类

        public function MyRestServiceEvent(type:String, request:MyRestRequest, result:* = null, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);

            this.result = result;
            this.request = request;
        }

        /**
         * Override clone to support re-dispatching
         */
        override public function clone():Event
        {
            return new MyRestServiceEvent(type, this.request, this.result, bubbles, cancelable);
        }
    }
}
  

事件调度程序类

public class MyRestService extends EventDispatcher
    {

        // ton of methods here but below is an example of one of the functions 

        private function checkAdminErrorHandler(evt:MyRestServiceEvent):void
        {
            dispatchEvent(evt.clone());
        }
}

2 个答案:

答案 0 :(得分:3)

clone()方法创建Event对象的重复实例。它通过创建类的新实例并将其属性设置为与原始实例相同的值来实现。自定义事件可以覆盖此方法以正确处理引用类型的复制。

当要重新分配事件时,需要克隆,以便可以将其只读属性(bubbles,cancelable,currentTarget,target)再次设置为新值。

答案 1 :(得分:2)

代码示例中的克隆是完全冗余的 - dispatchEvent实际上调度了一个克隆(因此需要[覆盖]自定义事件中的克隆方法),因此不需要将克隆传递给它。这段代码完全相同:

dispatchEvent(evt);

至于为什么要重新调度事件,我猜它是因为事件冒泡设置为false。因此,有效地重新安排活动'起泡'它在应用程序的另一层,所以更多的东西'可以听听。