カテゴリー
未分類

mx.events.EventDispatcher #2

icon_flash8.jpg以前に書いたmx.events.EventDispatcherにこれまた先日書いたprivate を適応させたら、”addEventListener”がエラーになった。
今まではClassの明確な型宣言を行ってなく、その場合はエラーになってない。
ということで解決の経緯をメモ(ちなみに手書きスクリプトなので、”;”が無かったり記述が曖昧な部分があるかもしれませぬ。ただ致命的エラーは無し)

import mx.events.*;
class Test_EventDispatcher{
private var dispatchEvent:Function;
public function Test_EventDispatcher($filePath:String){
EventDispatcher.initialize(this);
}
public function TEST(){
this.dispatchEvent({type: “conf”, src:”ahoaho”});
}
}
===本文===
var listner:Object = {};
listner.conf = function(mEvent:Object):Void {
trace([“conf called”, mEvent.src]);
};
function init() {
TEST = new Test_EventDispatcher();
TEST.addEventListener(“conf”, listner);
}
init();
TEST.TEST();
===出力===
conf called,ahoaho

これを以下のようにすると

===本文===
var TEST:Test_EventDispatcher;
var listner:Object = {};
listner.conf = function(mEvent:Object):Void {
trace([“conf called”, mEvent.src]);
};
function init() {
TEST = new Test_EventDispatcher();
TEST.addEventListener(“conf”, listner);
}
init();
TEST.TEST();
===出力===
**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 8:’addEventListener’ という名前のメソッドはありません。
TEST.addEventListener(“conf”, listner);

とのこと。
import mx.events.*;でaddEventListenerが勝手に追加されていると思っていたが、どーも違うらしい。
import mx.events.*;のパスが間違っているのかと思って外したら当然のことながら「**エラー** E:\実験君\classでの変数継承\Test_EventDispatcher.as: 行 6:’EventDispatcher’ という名前のメソッドはありません。
EventDispatcher.initialize(this);」となった。
なので、addEventListenerも明示的に定義して解決。

import mx.events.*;
class Test_EventDispatcher{
private var dispatchEvent:Function;
public var addEventListener:Function;
public function Test_EventDispatcher($filePath:String){
EventDispatcher.initialize(this);
}
public function TEST(){
this.dispatchEvent({type: “conf”, src:”ahoaho”});
}
}
===本文===
var TEST:Test_EventDispatcher;
var listner:Object = {};
listner.conf = function(mEvent:Object):Void {
trace([“conf called”, mEvent.src]);
};
function init() {
TEST = new Test_EventDispatcher();
TEST.addEventListener(“conf”, listner);
}
init();
TEST.TEST();
===出力===
conf called,ahoaho

ということで解決。
なんつーか厳密になると結構面倒だなぁと思うと同時に、オデってすごいいい加減だったなぁとも思った。

「mx.events.EventDispatcher #2」への2件の返信

この先にどういうことやろうとしてるかによりますが、extedsしてあげれば良いんじゃないでしょうか。
class Test_EventDispatcher extends mx.events.EventDispatcher {
public function Test_EventDispatcher() {
initialize(this);
}
public function TEST() {
dispatchEvent({type:”conf”, src:”ahoaho”});
}
}

あ、そうか。
extendsしないと継承されないね・・。ちと色々詰め込んでいるんで他にextendsしてるかもしれないんですが、確認してみます。
アリガトー。

コメントを残す

メールアドレスが公開されることはありません。