`
emavaj
  • 浏览: 50246 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flex 事件监听的思考

    博客分类:
  • 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
1
分享到:
评论
3 楼 yangfan1110 2014-07-10  
有一种做法是,自定义事件,自定义事件是可以带参数变量的,就是在触发监听的时候,传递参数,然后在监听事件的方法里就可以用参数了。
2 楼 bence 2010-05-27  
没辙了,一般是用匿名内部类来处理,也就是所谓的闭包特性
1 楼 xwy55555 2010-05-27  
还有一种方法是把参数传过来,再传回来

相关推荐

    Flex中方法调用顺序的思考

    事件监听器按照它们添加到组件的顺序依次执行。同时,需要注意的是,事件冒泡机制允许事件从子组件向上传播到父组件,而事件捕获则相反,从父组件向下到子组件。 在调试和优化Flex应用时,理解这些方法调用的顺序...

    Flex从入门到实践——源代码(2,5,6,7章)

    此外,还会接触Flex的事件处理机制,理解如何通过事件监听器来响应用户交互。 第5章:组件篇 此章节深入讲解了Flex中的组件库,包括基本组件如Button、Label、TextInput,以及更复杂的组件如DataGrid、Tree等。你会...

    flex 小游戏碰碰球,分类详细

    例如,玩家的每一个动作都会触发相应的事件,ActionScript代码会监听并处理这些事件,使小球移动、碰撞并产生反馈。MXML则用于定义用户界面,包括游戏界面的布局、按钮、文本等元素。同时,物理引擎可能是通过模拟...

    绑定也疯狂 第二版

    在Flex框架中,当绑定源数据发生变化时,它会发出一个事件,观察机制会接收到这个事件,并执行相应的代码以更新目标位置的数据。这种机制可以极大地提高开发效率,因为它减少了编写事件监听器和更新UI代码的需要。 ...

    flex flash as3 actionscript控制音量代码实例

    这里我们创建了一个新的声音对象,并监听了IO错误事件。然后加载指定的URL请求,最后播放声音。 设置音量的函数: ```actionscript function setVolume(volume:Number):void { trace("setVolume: " + soundvol....

    用jquery做的一个特效

    例如,我们可以监听鼠标悬停事件来实现导航项的高亮效果: ```javascript $(document).ready(function() { $('#nav li a').hover(function() { $(this).addClass('active'); // 鼠标悬停时添加高亮类 }, ...

    小程序源码 SMS 短信内容显示在一个 泡泡 形状的窗口中.zip

    短信内容的显示会涉及到数据绑定,可能还需要监听用户交互事件,例如点击显示或隐藏泡泡窗口。 6. **API调用**:在获取和显示短信内容时,可能需要调用微信小程序的SMS API。这通常涉及到用户授权和隐私保护,因此...

    五子棋小游戏 HYML代码

    - 同样未在代码片段中体现,但一般通过监听鼠标点击事件,获取鼠标点击的位置,并判断该位置是否合法,然后在相应位置绘制黑或白棋子。 4. **胜利检测**: - 需要编写逻辑来检查是否有五个连续的同色棋子在一行、...

Global site tag (gtag.js) - Google Analytics