flex偶尔监听不到事件的原因

首先明确一个原理:函数中的变量都是局部变量,会被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();
		}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值