今天在钻研一个pureMVC例子的时候,似乎恍然领悟了自定义Event的意义。自定义Event的不解一直困扰着我,具体说来就是我不知道自定义Event有什么用,怎么用。今天这一切烦恼或者是不解都不将存在。
自定义Event:用来清除注册表单中的用户名和密码,这些具体算法封装在方法clearForm中。
本文讲解自定义Event使用了两个文件,一个是UserForm.mxml(定义Event),另一个是UserFormMediator.as(注册和调用Event)。
... <mx:Metadata> [Event('cancel')] </mx:Metadata> <mx:Script> <![CDATA[ public static const CANCEL: String = "cancel" private function cancel():void{ dispatchEvent(new Event(CANCEL)); } ]]> </mx:Script> ... <mx:Button id="cancelButton" click="cancel();" /> ...
其中[Event('cancel')]定义了Event.type为'cancel',在Script代码段中,通过cancel方法直接派发(dispatchEvent)用户自定义事件CANCEL(常量,存储的cancel)。这个方法会在取消按钮(cancelButton)点击时被调用。也就是说,当点击取消按钮后,会派发CANCEL事件。
CANCEL事件派发了,但是派发出去的事件有什么用呢?派发出去了事件,难道用户表单就可以被清空了么?并非如此,接着看。下面在UserFormMediator.as文件中注册CANCEL事件,并详细定义“清空”方法。
... userForm.addEventListener(UserForm.CANCEL, onCancel); ... private function onCancel(event:Event):void{ clearForm(); } private function clearForm():void{ /* 这里自定义清空用户表单的方法 */ } ...
userForm.addEventListener(...)注册了事件。括号中的第一个参数UserForm.CANCEL引用的是UserForm类(即UserForm.mxml,在Flex中美一个mxml都是一个类)中的CANCEL常量,其实就是“cancel”;第二个参数表示要调用的方法即onCancel,注意onCancel方法中的参数event必须是和UserForm.CANCEL对应的Event一致(不要忘记上一个文件定义的[Event("cancel")]是一个Event。这样通过调用clearForm方法就可以清除用户表单信息了。
在把思路整理一遍:
用户单击"取消“按钮,用户表单上的文字是如何消失的呢?
原本可以直接调用clearForm方法,但是我们这里不采用这一手段,我们采用自定义Event。这也是本文中心。
用户单击“取消”按钮,触发UserForm.mxml中的cancel方法;
cancel方法中派发CANCEL事件;
由于UserFormMediator.as文件中已经addEventListener了CANCEL事件,因此可执行被注册监听器方法onCancel;
onCancel监听器方法中调用并执行了clearForm方法(clearForm方法中定义了具体的清除用户表单的步骤)。
本文作者吴磊,转载请注明作者姓名和文章地址http://superwulei.iteye.com/admin/blogs/480829