首先明确一个原理:函数中的变量都是局部变量,会被GC垃圾回收
因此,在函数中给局部变量添加事件监听,会概率性的出现监听不到事件返回的情况。
近期在做flex批量文件上传时,在一个函数里遍历FileReferenceList中的FileReference,然后动态给FileReference添加Event.COMPLETE事件,结果发现在直接运行时根本不会进入到我添加的事件监听中,但是一步步DEBUG的话就可以。
代码如下:
/**
* 上传文件
*/
public function upload():void {
this.batch = UIDUtil.createUID();
var file:FileReference = this.fileList.fileList.shift() as FileReference;
file.addEventListener(Event.COMPLETE, completeHandler);
file.load();
waitUpload();
}
因为是通过局部变量file动态添加监听,所以会被GC垃圾回收,就监听不到了
定义一个私有变量,来进行监听即可了
/**
* 上传文件
*/
public function upload():void {
this.batch = UIDUtil.createUID();
this.currentFile = this.fileList.fileList.shift() as FileReference;
this.currentFile.addEventListener(Event.COMPLETE, completeHandler);
this.currentFile.load();
waitUpload();
}