奇妙な問題があります!関数を呼び出して 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);
}
問題は、リスナーからこの「インデックス」変数にアクセスする必要があることです。各ファイルには独自のインデックスがあり、追跡するために各イベント クラスを拡張する必要がある場合は負担になるため、グローバル変数として設定できません。インデックス (Event、ProgressEvent、..) の 誰かがこれについて私を助けてくれることを願っています。
EDIT2:
実際に一時的な解決策を見つけましたが、それが最善かどうかはわかりません! removeListener メソッドを実際には upload メソッド内に配置しましたが、変数にしました。AS3 では動的オブジェクトが許可されているため、このメソッドをオブジェクトの 1 つにアタッチし、必要に応じてメソッドへの参照を呼び出すだけです。イベントは実際に削除されます。これは良い解決策ですか?
どうもありがとう、ルディ