【发布时间】:2023-03-08 16:18:01
【问题描述】:
在actionscript中,我们可以用这个来调度事件:
dispatchEvent(new Event("MyEvent"));
然后通过这个监听事件:
stage.addEventListener("MyEvent", MyFunc);
但是我怎样才能通过事件传递附加信息,以便我可以在MyFunc 函数中访问它?
谢谢。
【问题讨论】:
标签: flash events actionscript
在actionscript中,我们可以用这个来调度事件:
dispatchEvent(new Event("MyEvent"));
然后通过这个监听事件:
stage.addEventListener("MyEvent", MyFunc);
但是我怎样才能通过事件传递附加信息,以便我可以在MyFunc 函数中访问它?
谢谢。
【问题讨论】:
标签: flash events actionscript
您可以使用 Subash Selvaraj 提供的示例,这是一个很好的示例。 我唯一的观点是:在我看来,每次要调度此事件时最好避免创建一个单独的变量(用于事件实例)。您可以改为向类构造函数添加其他参数。 因此,您的新事件类可能如下所示:
import flash.events.Event;
public class MyEvent extends Event
{
public var objEventData:Object;
public function MyEvent(type:String, event_data:Object=null, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
objEventData = event_data;
}
public override function clone():Event
{
return new MyEvent(type, objEventData, bubbles, cancelable);
}
}
在这种情况下,您可以像这样调度您的事件:
dispatchEvent(new MyEvent(EVENT_TYPE, YOUR_DATA) );
之后,您可以从事件处理程序访问传递的数据,即 MyFunc:
private function MyFunc(event:MyEvent):void
{
var buff:Object = event.objEventData;
}
您可以将 Object 类替换为您需要的任何类型。
【讨论】:
package {
import flash.events.Event;
public class MyEvent extends Event {
public static const TEST:String = "TEST";
public myValue:Object = new Object();
public function MyEvent (type:String, bubbles:Boolean=true, cancelable:Boolean=false) {
// constructor code
super(type, bubbles, cancelable);
}
public override function clone():Event
{
return new MyEvent(type, bubbles,cancelable);
}
}
}
在你的主文件中这样使用,
private var eventInstance:MyEvent;
eventInstance= new MyEvent(MyEvent.TEST);
eventInstance.myValue = yourObject;
dispatchEvent(eventInstance);
希望对你有帮助。
【讨论】:
您必须创建一个自定义事件,并为其添加自定义属性。这是一个例子。
public class CustomEvent extends Event
{
public function CustomEvent (type:String,
bubbles:Boolean=true,
cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
public var dataYouWantToPass:OfSomeClass;
}
bubbles=true 取决于您是否希望它在显示列表中冒泡。
【讨论】: