Actionscript 3 Flash:使用一个eventlistener侦听同一类型的所有事件
这不是生死攸关的问题,但我想知道这是否可能: 我从一种类型的自定义事件(FormEvent)中得到了两个事件,现在我得到了一个FormListener,它侦听所有这些事件并根据事件类型处理它们。我希望一次添加所有事件,而不是一次添加一个eventListener 现在看起来是这样的:Actionscript 3 Flash:使用一个eventlistener侦听同一类型的所有事件,actionscript-3,events,Actionscript 3,Events,这不是生死攸关的问题,但我想知道这是否可能: 我从一种类型的自定义事件(FormEvent)中得到了两个事件,现在我得到了一个FormListener,它侦听所有这些事件并根据事件类型处理它们。我希望一次添加所有事件,而不是一次添加一个eventListener 现在看起来是这样的: private function addListeners():void { addEventListener(FormEvent.SHOW_FORM, formListener)
private function addListeners():void {
addEventListener(FormEvent.SHOW_FORM, formListener);
addEventListener(FormEvent.SEND_FORM, formListener);
addEventListener(FormEvent.CANCEL_FORM, formListener);
}
private function formListener(event:formEvent):void {
switch(event.type){
case "show.form":
// handle show form stuff
break;
case "send.form":
// handle send form stuff
break;
case "cancel.form":
// handle cancel form stuff
break;
}
}
但我宁愿做一些类似的事情,而不是一次添加一个事件
private function addListeners():void {
addEventListener(FormEvent.*, formListener);
}
我想知道这样的事情是否可能,我会喜欢的。我处理大量的事件:)我不知道有哪种例程可以让您直接这样做,但您可以自己编写。这里的语法并不完美,但这里是第一步:
private function addMultipleEventListeners( evts:Array, callback:function ):void
{
for each( var evt:Event in evts )
{
addEventListener( evt, callback );
}
}
然后,您可以这样称呼该例程:
var evts:Array = [ FormEvent.SHOW_FORM, FormEvent.SEND_FORM, FormEvent.CANCEL_FORM ];
addMultipleEventListeners( evts, formListener );
无论如何,在这种情况下,您实际上只需要一个事件侦听器。该监听器将监听表单的任何更改,并且参数等于事件监听器函数可以使用的更改。我将向您展示,但请记住,这是一种伪情况,通常我不会将事件分派给像方法调用这样简单的对象,因为分派是隐含的,因此不需要真正地侦听它 首先是自定义事件
package com.yourDomain.events
{
import flash.events.Event;
public class FormEvent extends Event
{
//Public Properties
public static const CANCEL_FORM:int = "0";
public static const SHOW_FORM:int = "1";
public static const SEND_FORM:int = "2";
public static const STATE_CHANGED:String = "stateChanged";
//Private Properties
private var formState:int;
public function FormEvent(formState:int):void
{
super(STATE_CHANGED);
formState = formState;
}
}
}
因此,我们刚刚创建了自定义事件类,并对其进行了设置,以便我们可以通过侦听器函数捕获状态,正如我在使用伪表单类时所演示的那样,该类将为所述自定义事件分派事件
请记住,这都是假设,因为我不知道您的代码是什么样子,也不知道您的实现方式。重要的是要注意,当我发送事件时,我需要发送一个反映新状态的参数
package com.yourDomain.ui
{
import flash.events.Event;
import flash.events.EventDispatcher;
import com.yourDomain.events.FormEvent;
public class Form extends EventDispatcher
{
public function Form():void
{
//Anything you want form to do upon instantiation goes here.
}
public function cancelForm():void
{
dispatchEvent(new Event(FormEvent.CANCEL_FORM);
}
public function showForm():void
{
dispatchEvent(new Event(FormEvent.SHOW_FORM);
}
public function sendForm():void
{
dispatchEvent(new Event(FormEvent.SEND_FORM);
}
}
}
最后,我们创建一个文档类来侦听它。请知道,我意识到,创建一个在调用类的方法时触发的侦听器是不符合逻辑的,因为您显然知道您调用了该方法,但对于本例来说,这是理所当然的
package com.yourDomain.ui
{
import com.yourDomain.ui.Form;
import com.yourDomain.events.FormEvent;
//Form is in the same package so we need not import it.
public class MainDocumentClass
{
private var _theForm:Form;
public function MainDocumentClass():void
{
_theForm = new Form();
_theForm.addEventListener(FormEvent.STATE_CHANGED, onFormStateChange, false, 0, true);
/*
The following three method calls each cause the
FormEvent.STATE_CHANGE event to be dispatched.
onFormStateChange is notified and checks what
the last change actually was.
*/
_theForm.cancelForm();
_theForm.showForm();
_theForm.sendForm();
}
private function onFormStateChange(e:FormEvent):void
{
switch(e.formState)
{
case CANCEL_FORM:
trace('The form was canceled');
break;
case SHOW_FORM:
trace('The form was revealed');
break;
case SEND_FORM:
trace('The form was sent');
break;
}
}
}
}
我希望这是有帮助的,已经很晚了,我以后可能不得不修改一些东西,但这应该有助于理解如何制作自己的事件,以及如何定制事情的工作方式