我有一个奇怪的问题!我试图通过调用函数来删除 FileReference 对象上的事件侦听器,但它似乎没有被删除,我不明白为什么。
这是代码:
private function clearFileUploadListeners(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.removeEventListener(Event.COMPLETE, dispatchEvent);
var bool:Boolean = file.hasEventListener(Event.COMPLETE);
if (bool)
trace("ERROR");
}
当我运行这段代码时,跟踪实际上发生了。当我试图删除上面的 eventListener 时,我不明白为什么这个布尔值返回 true!我想我可能正在做一些非常愚蠢的事情,因为这似乎是一个奇怪的错误。
我希望有人可以在这个问题上帮助我。
编辑:
我相信这与我添加侦听器时 dispatchEvent 函数是在另一个函数中定义的事实有关:
private function upload(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.addEventListener(Event.COMPLETE, dispatchEvent);
}
问题是我需要从侦听器访问这个“索引”变量,我不能将它设置为全局变量,因为每个文件都有它自己的索引,如果我必须扩展每个事件类来跟踪它是一个负担的索引(事件,ProgressEvent,..)。我希望有人可以帮助我。
编辑2:
我实际上找到了一个临时解决方案,我不确定它是否是最好的!我把我的 removeListener 方法实际上放在了上传方法中,但是把它变成了一个变量。由于 AS3 允许动态对象,我将此方法附加到我的一个对象,因此我只在必要时调用该方法的引用。该事件实际上已被删除。请问这是一个好的解决方案吗?
非常感谢你,鲁迪