2 つのモジュール間で文字列を渡すために使用するカスタム イベントを作成しました。イベントは次のようになります。
package com.mypackage.events
{
import flash.events.Event;
public class ThumbDeleteEvent extends Event
{
public static const THUMBS_DELETED:String = "thumbsDeleted";
public var files:String;
public function ThumbDeleteEvent(type:String, files:String)
{
super(type);
this.files = files;
}
// Override the inherited clone() method.
override public function clone():Event {
return new ThumbDeleteEvent(type, files);
}
}
}
あるモジュールでは、次のようにイベントをディスパッチします。
parentApplication.dispatchEvent(new ThumbDeleteEvent("parentApplication.thumbsDeleted", files));
別のモジュールでは、次のようにイベントをリッスンします。
public function init():void {
parentApplication.addEventListener("parentApplication.thumbsDeleted", onThumbsDelete);
}
次のようにリスナー関数に渡されるタイプとして ThumbsDeleteEvent を使用する場合:
public function onThumbsDelete(evt:ThumbDeleteEvent):void{
trace("thumb delete event for thumbs: "+evt.files);
}
次のエラーが表示されます。
TypeError: Error #1034: Type Coercion failed: cannot convert com.mypackage.events::ThumbDeleteEvent@26748a31 to com.mypackage.events.ThumbDeleteEvent.
次のように、リスナー関数に渡される型として Event を使用するだけの場合:
public function onThumbsDelete(evt:ThumbDeleteEvent):void{
if(evt is ThumbDeleteEvent){
trace("thumb delete event for thumbs: "+(evt as ThumbDeleteEvent).files);
}else{
var type:XML = describeType(evt);
trace(type.toXMLString());
}
}
それは機能しますが、それが ThumbDeleteEvent タイプのクラスであるとは考えていません (else ステートメントにヒットします)。
type name="com.mypackage.events::ThumbDeleteEvent"
ここで何が起こっているのですか?デバッガーにブレークポイントを設定すると、イベントが ThumbDeleteEvent であると表示され、files パラメーターとその権利を確認できますか???