获取错误类型1061:通过具有静态类型的引用调用可能未定义的方法addEventListener

时间:2012-08-06 10:02:06

标签: actionscript-3 flex

我将我的代码从我的应用程序移动到一个单独的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);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您的代码

addEventListener(SETTINGS_CHANGE, settingChangeHandler);

评估为

this.addEventListener(SETTINGS_CHANGE, settingChangeHandler);

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

将功能声明更改为

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

或者实现单例模式以获得"静态类,该类调度事件"

Singleton with event management.

答案 1 :(得分:1)

您已将方法init声明为静态,因此您可以使用的只是静态字段,静态方法,不属于该实例的对象。

从函数中删除静态,或尝试实现单例,如果它是你想要的。

这里有一个非常简单的快速:

 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();