AS3のEventメタデータタグは何のためにあるの?

Eventメタデータタグの便利な点についてご教授いただいた過程をまとめました。
14
にこ らす @Nicol_as

eventメタデータタグが何のためにあるのか、いまいちわかってない。ので使ったことない…

2010-11-16 22:08:16
ザーヒル🍹👑⚖🍶👿 @zahir1929

@Nicol_as addEventListenerの入力補完ようですかね?

2010-11-16 22:10:19
ザーヒル🍹👑⚖🍶👿 @zahir1929

@Nicol_as FBしか使ってませんがFDでも行けたはずです。IDEとかその他はわかりません

2010-11-16 22:18:19
にこ らす @Nicol_as

@zahir1929 FDでは(FBでも?)、メタデータタグにしなくても「 addEventListener( 」と打った後には色々なEvent定数が補完候補として出ると思うのですが、それとの違いがよく分からないんです。

2010-11-16 22:24:24
@Hiiragi3

@nicol_as 主にMXMLタグでイベントを扱う時に重要ですねー。あとはFlashDevelopでもEventメタデータタグ書いておくと、そのクラスへのaddEventListenerの時にコードヒントに追加で出てきますよ。

2010-11-16 22:25:08
@Hiiragi3

あとはASDoc吐き出す時に、Eventメタデータタグに反応して対応するイベントが書き出されるから、それでも必要ですね。

2010-11-16 22:27:09
ton @ton1517

@Nicol_as ASDocのためじゃないかな

2010-11-16 22:28:21
にこ らす @Nicol_as

@Hiiragi3 @ton1517 ASDocでも必要になるんですね!ありがとうございます!

2010-11-16 22:34:19
にこ らす @Nicol_as

@Hiiragi3 ありがとうございます。MXMLで必要になるのですね。コードヒントが出るとのことですが、ためしにMinimalCompsのComponentクラス("draw"が定義されている)のインスタンスにaddEventListenerしてみたところ補完は出ませんでした…

2010-11-16 22:33:15
ザーヒル🍹👑⚖🍶👿 @zahir1929

@Nicol_as 自分でクラスとかカスタムイベントを作った時にはメタタグつけないと出なくないです?

2010-11-16 22:30:25
bkzen @bkzen

@Nicol_as たぶんそれは Sprite等(EventDispatcherのサブクラス)の場合では? 単純に EventDispatcher を new して addEventListener( をやっても ACTIVATE/DEACTIVATE くらいしか出てこないはず。

2010-11-16 22:35:05
にこ らす @Nicol_as

@Hiiragi3 @zahir1929 @bkzen もしかしたら理解できたかも知れません…。いつもaddEventListenerのあとにカスタムイベント定数を呼び出す際は、自分でカスタムイベントのクラス名を入れていたんですが、それがいらなくなるということですか?

2010-11-16 22:40:07
ザーヒル🍹👑⚖🍶👿 @zahir1929

@Nicol_as 少なくとも入力補完の候補リストには表示されます

2010-11-16 22:41:10
ザーヒル🍹👑⚖🍶👿 @zahir1929

@Nicol_as 例えば継承なしでIEventDispatcherを実装したクラスを作った場合はイベントタグを付けないと何一つ入力補完候補はでませんが[Event(name="complete", type="flash.events.Event")]とかすると出ます

2010-11-16 22:43:37
にこ らす @Nicol_as

@zahir1929 継承されたイベントだけが補完に出るわけですね!今調べてみたら、SpriteにaddEventListenerしたときに出る補完が、AS3リファレンスのSpriteの「イベント」のリストと同じでした…

2010-11-16 22:51:12
@Hiiragi3

@nicol_as @zahir1929 @bkzen 多分他の方が答えられてると思いますが、そんな感じです。EventDispatcher拡張クラスにEventメタデータタグで、何かしらのイベントを定義しておくと(続く)

2010-11-16 22:51:24
@Hiiragi3

@nicol_as @zahir1929 @bkzen (続き)そのEventDispatcherのインスタンスにaddEventListenerしようとすると、Eventメタデータタグで関連付けたイベントがコードヒントとして出るはずです。

2010-11-16 22:52:23
@Hiiragi3

まぁなんにしても、スーパークラスで定義されているイベント以外のイベントをディスパッチするように作った場合は、Eventメタデータタグを入れておくと、ASDocでも反応するし、コードヒントも出るし、って感じでメリットが多いんで、特に俺俺ライブラリではつけるのをお勧めー。

2010-11-16 22:57:58
にこ らす @Nicol_as

@Hiiragi3 詳しい説明ありがとうございます。だいぶ分かってきました。もう一つお聞きしたいのですが、補完されるためには、eventメタタグのnameの値("resize"など)は、typeの値が示すクラス(Eventなど)に定数として含まれていないといけないですよね?

2010-11-16 23:07:10
@Hiiragi3

@nicol_as コードヒントの場合は、定数として出したいならそういうことになりますけど、入って無くても大丈夫ですよ。ただし、"hoge"みたいな感じで、Stringとして出ますけど。ASDocだと多分エラーが出そうな・・・。ちょっとそこは判らないですねー。

2010-11-16 23:21:40
@Hiiragi3

Stringとして出るっていうのは、addEventListener("hoge", handler);っていうことですね。Event.HOGEみたいな感じでは出ないってことです。

2010-11-16 23:23:50
にこ らす @Nicol_as

@Hiiragi3 コードヒントなら定数でなくても出るんですね。ありがとうございます!

2010-11-16 23:28:56
bkzen @bkzen

Event メタデータタグに限らず、メタデータタグはクラスに対してメタデータを定義する。describeTypeとかやってみるとわかる

2010-11-16 23:36:08
にこ らす @Nicol_as

@bkzen 色々やってみましたがtrace(describeType(new EventDispatcher))とやってみたら理解できました。ここにdeactivateとactivateが定義されているのですね。

2010-11-17 00:00:00