0

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 パラメーターとその権利を確認できますか???

4

1 に答える 1