Jor*_*ren 7 events listener actionscript-3 observer-pattern
所以我想要一种方法来设置事件,以便我可以传递数据而不会创建闭包\内存泄漏.这是我所拥有的:
package com.events {
import flash.events.Event;
public class CustomEvent extends Event {
public static const REMOVED_FROM_STAGE:String = "removedFromStage";
public var data:*;
public function CustomEvent(type:String, customData:*=null, bubbles:Boolean=false, cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.data = customData;
}
public override function clone():Event {
return new CustomEvent(type, data, bubbles, cancelable);
}
public override function toString():String {
return formatToString("CustomEvent", "type", "data", "bubbles", "cancelable", "eventPhase");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这让我有以下行为:
function testme(e:Event) {
trace(e);
}
test_mc.addEventListener(CustomEvent.REMOVED_FROM_STAGE, testme);
test_mc.dispatchEvent(new CustomEvent(CustomEvent.REMOVED_FROM_STAGE, 42));
//Traces [CustomEvent type="removedFromStage" data=42 bubbles=false cancelable=false eventPhase=2]
removeChild(test_mc);
//Traces [Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]
Run Code Online (Sandbox Code Playgroud)
我的目标是获取我想要传递的自定义数据以从事件闪光灯传递,而不仅仅是我发射的那个.例如,如果我想传递一个movieclip和一个loader.COMPLETE事件来放置生成的位图怎么办?
您扩展了 Event 类,以便它分派额外的数据,现在,如果您希望 Loader 类分派您的自定义事件类型,请扩展 Loader 类来执行此操作(或您想要使用的任何其他类)。在此示例中,我将使用此功能重写 URLLoader(因为 Loader 实际上从其 contentLoaderInfo 调度事件,这需要两个重写的类,我只想保持简单)
package com.net
{
import flash.net.URLLoader;
import flash.events.Event;
import com.events.CustomEvent;
public class CustomLoader extends URLLoader
{
// URLLoader already has a data property, so I used extraData
public var extraData:*;
override public function dispatchEvent(event: Event) : Boolean
{
var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable);
return super.dispatchEvent(customEvent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在要将其与您的 CustomEvent 类一起使用,请在 .fla 中尝试此代码
import com.net.CustomLoader;
import com.events.CustomEvent;
var loader: CustomLoader = new CustomLoader();
loader.extraData = "Extra Data";
loader.load(new URLRequest("test.xml"));
loader.addEventListener(Event.COMPLETE, loadComplete);
function loadComplete(event: CustomEvent) : void
{
trace(event.data); // Extra Data
}
Run Code Online (Sandbox Code Playgroud)
嘭!有关您固有调度事件的自定义数据!
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |