我将我的代码从我的应用程序移动到一个单独的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);
}
}
}
答案 0 :(得分:1)
您的代码
addEventListener(SETTINGS_CHANGE, settingChangeHandler);
评估为
this.addEventListener(SETTINGS_CHANGE, settingChangeHandler);
静态方法中没有this
,因为它设计为在没有实例的情况下运行。此外,您无法附加事件侦听器并从静态类派发事件。
将功能声明更改为
public function init(clearCache:Boolean = false):void
或者实现单例模式以获得"静态类,该类调度事件" 。
答案 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();