Flex 事件监听的思考

 Flex 是异步的...

这个大家应该是知道的...

 

那么,大家有没有对异步的开发方式困惑呢 ?

 

具体说就是...你不知道方法什么时候执行...

 

还是模糊,举个例子吧:

 

var request:URLLoader = new URLLoader();
request.addEventListener(Event.COMPLETE,loadStateInfo);
request.load(new URLRequest(this.file));

 这个是Flex 读取远程资源的例子

这个语句监听了加载的完成,然后执行loadStateInfo函数

 

如果你需要同步机制怎么办?

 

加入你需要远程加载完成之后

再执行一些函数?

 

有人说很简单啊,在监听函数里面执行不就行咯...

 

加入你执行的函数需要传入参数呢? 那你如何传参?

比如你加载完成后要执行以下函数:

protected function moveEffect(target:UIComponent,targetX:int,targetY:int):void {
	if (target.x != targetX || target.y != targetY) {
		var move:Move = new Move(target);
		move.xTo = targetX;
		move.yTo = targetY;
		move.play();
	}
}

 那你如何将所需的targetX和targetY传入给这个函数呢?

监听事件中 event:Event 这个对象有吗?

 

所以,你有几种选择...

 

1) 全局变量 或者 类属性

这个方法有点笨...但是有时候有用...

具体就是,设置一个或多个全局变量作为“暂时存储”,当方法完成后,再传入要执行的函数

 

2) 闭包特性

也就是不写出方法名,只有方法体:

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

 这样上面的arg1和arg2 这个2个参数,是局部的变量,但是使用了闭包这个特性

你就不用管它监听到事件后如何取得参数了,总之就是传进去了...

 

 

这样一说,大家会感觉闭包方法应该是非常好的...

但是...

我们必须又要面临的问题是...如果移除监听?

 

这个又成了难题...难道又用全局变量或者是属性?

那不成了第一个方法了?

 

如果监听的事件能像Timer类一样就好了...

/**延时执行.*/
var late:Timer = new Timer(300,1);
late.addEventListener(TimerEvent.TIMER_COMPLETE,function(event:TimerEvent):void {
	removeElem(xFrom,yFrom);
});
late.start();

 

这个上面的第二种方法一样,使用了闭包的特性...

但是..又加上了Timer的特点...指定了监听次数...所以不用自己移除方法...

 

当然,局限性也凸显了...你需要定时...

 

说来说去... 小弟也没有什么好点子...

 

所以向各位请教...

 

或许这个问题早就有方法解决了的... 只是因为小弟见识不广,而导致这样的疑虑...

 

望指教...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值