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

你的代码

addEventListener(SETTINGS_CHANGE, settingChangeHandler);

评估为

this.addEventListener(SETTINGS_CHANGE, settingChangeHandler);

静态方法中没有this,因为它被设计为在没有实例的情况下运行。此外,您不能附加事件侦听器并从静态类调度事件。

将您的函数声明更改为

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

或者实现一个单例模式来获得一个“调度事件的静态类”

带有事件管理的单例。

于 2012-08-06T10:25:33.780 回答
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 回答