flex注册监听器带额外参数的解决

flex的事件功能很强大,自定义的事件可以传输任何我想要的数据作为参数,但是对于系统事件,我想要传一些额外的参数时应该怎么办呢?网上查到的方法一般是采用闭包特性,即采用如下方法:

 

this.addEventListener(LoadDataEvent.LOADDATA_EVENT,function(event:Event):void{  
    abc(arg1, arg2);  
});


当然对于用户自定义事件想要传递事件包含信息之外的参数,也是可以使用这种方法的。这种方法大部分情况下都是可以使用的,但是我在实验中却遇到了属于少部分的例外情况。

实验场景如下:有一个FileReference的ArrayCollection,对这个ArrayCollection中的每一个FileReference进行load操作,在每一个FileReference加载完成后进行一些操作,例如输出当前FileReference在ArrayCollection中的下标。原始代码如下:

privae function loadf():void
{
	var index:int = 0;
	for(var i:int=0; i<arr.length;i++)
	{
		index = i;
		file:FileReference = arr.getItemAt(i) as FileReference;
		file.addEventListener(Event.COMPLETE, function(e:Event):void{onCompleted(e,index)});
		file.load();
	}
}
private function onCompleted(e:Event,i:int):void
{
	Alert.show(“第”+(i+1)+”个文件加载完成”);
}


假设有3个比较大的文件,那么运行上面的代码,得到的结果就是3个Alert提示输出的均为“第3个文件加载完成”。究其原因,我们推测,flex在使用index时并不是使用的值,而是指出了index值存储的位置,当实际使用它的值的时候再到该位置去取(不确定flex是否如此操作的,只是这么解释看似比较合理),那么当前两个文件都加载完成之后,index的值早已经是2了,所以Alert输出的内容只能是3。

当然上面例子里这个index是完全没有必要的,我只是为了说明问题将它放到这里的。

目前我想到的解决上述问题的方法,是创建一个新的类,其参数为一个FileReference和一个index,对FileReference的COMPLETE事件捕获后添加index参数再发出一个新的事件。例如新类为NewFileStruct,参数为:

private var _f:FileReference;
private var _fileIndex:int;


在构造函数中注册FileReference的Event.COMPLETE事件的监听函数,监听函数内容如下:

private function onComplete(e:Event):void
{
	var mycom:myComplete = new myComplete(myComplete.ANASEL);
	mycom.myfile = _f;
	mycom.fileIndex = _fileIndex;
	mycom.dispatch();
}


myComplete是自己写的事件,参数为:

public var myfile:FileReference;
public var fileIndex:int;


在使用NewFileStruct时便可以监听myComplete事件来达到传递fileIndex参数的目的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值