1

コードをアプリケーションから別の AS クラス ファイルに移動したところ、次のエラーが発生しました。

1061: Call to a possibly undefined method addEventListener through a reference with static type Class.

1180: Call to a possibly undefined method addEventListener.

.

package managers {


    import flash.events.Event;
    import flash.events.EventDispatcher;

    public class RemoteManager extends EventDispatcher {


        public function RemoteManager() {

        }


        public static function init(clearCache:Boolean = false):void {

            addEventListener(SETTINGS_CHANGE, settingChangeHandler);
            addEventListener(ITEMS_UPDATED, itemsUpdatedHandler);
        }
    }
}
4

2 に答える 2

1

メソッドinitをstaticとして宣言したので、これに使用できるのは静的フィールド、静的メソッド、インスタンスに属するオブジェクトはありません。

関数からスタティックを削除するか、目的の場合はシングルトンを実装してみてください。

ここで簡単な本当に簡単なもの:

 public class RemoteManager extends EventDispatcher {
    private static var _instance:RemoteManager;
    public function static getInstance():RemoteManager{
     if (_instance == null) _instance=new RemoteManager();
     return _instance;
    }

    public function RemoteManager() {
      if (_instance != null) throw new Error("use getInstance");
    }


    public static function init(clearCache:Boolean = false):void {
        getInstance().addEventListener(SETTINGS_CHANGE, settingChangeHandler);
        getInstance().addEventListener(ITEMS_UPDATED, itemsUpdatedHandler);
    }
}

// use it
RemoteManager.init();
于 2012-08-06T10:30:51.113 に答える
1

あなたのコード

addEventListener(SETTINGS_CHANGE, settingChangeHandler);

に評価されます

this.addEventListener(SETTINGS_CHANGE, settingChangeHandler);

thisインスタンスなしで機能するように設計されているため、静的メソッドにはありません。さらに、イベント リスナーをアタッチして、静的クラスからイベントをディスパッチすることはできません。

関数宣言を次のように変更します

public function init(clearCache:Boolean = false):void

または、シングルトンパターンを実装して、「イベントをディスパッチする静的クラス」を取得します。

イベント管理を備えたシングルトン。

于 2012-08-06T10:25:33.780 に答える