- 浏览: 78768 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
兩ting:
说实话,我没有装成功。。。
Ubuntu上搭建Flex4的开发环境 -
chenzhou123520:
写得很好,赞一个,不过指出一个小错误引用表 2. IoSess ...
Mina服务器开发入门基础,实例讲解 -
jinx3166:
受益良多!
关于flex不能移除监听器总结 -
兩ting:
Flex太强大了,不过会的人不是很多.精通的人就更少了
Ubuntu上搭建Flex4的开发环境 -
liminjun:
你们平时开发也是用Ubuntu吗?Flex做企业项目还是有很大 ...
Ubuntu上搭建Flex4的开发环境
首先看我从网上转载了一篇文章:
<!------------
在flex中我们可以很方便的在mxml标签中使用事件名="函数名()"来给对象添加侦听..
像click="goUrl()"
可是当我们不需要该侦听的时候..
如果想使用
id.removeEventListener("click",goUrl)来删除侦听.
却发现怎么也remove不成功..
原来使用该方法给对象添加侦听时..
flex并不是直接使用我们指定的函数(goUrl),
而是先动态生成一个函数.
然后再使用该函数调用我们指定的函数..
所以我们使用id.removeEventListener("click",goUrl)当然就失败了...
正当ym的时候..记得之前使用过状态(state)来移除过这样的侦听..
马上试了下一下..
<mx:states>
<mx:State name="statename">
<mx:SetEventHandler target="{obj}" name="click"/>
</mx:State>
</mx:states>
运行了一下..果然成功了..
无耐之前只好把swf反编译一下...终于在代码里看到了
一个叫"__obj_click"的函数..
猜想这个应该就是由flex动态添加的函数..于是试了一下...
obj.removeEventListener("click",this["__obj_click"]);
//这里需要注意..为什么不直接使用__obj_click
而使用this["__obj_click"],
因为当flex编译时..__obj_click 这个函数还不存在,直接调用会出错..所以取巧一下..
保存运行..侦听成功删除...猜想正确...
分析一下该函数的规律..
第一部份是"__"
第二部份是对象ID
第三部份是"_"
第四部份是事件名
相应的
mouseOver事件就是__obj_mouseOver
mouseDown事件就是__obj_mouseDown
-------------!>
在实际运用中,我们可能为某个组件或容器添加监听
xx(Id).addEventListener(xxxEvent,fun)
又要在AS代码中用获取组件或容器的ID来移除监听
xx(Id).removeEventListener(xxxEvent,fun);此时不能移除该监听改怎么办呢?
今天在开发的时候用到了一种比较简单和实用的办法就是,在上面的监听事件执行方法fun中用判断
一个变量的值来控制代码执行,比如加一个flg:Boolean的开关,将要监听的代码放到if(flg){}里面,用
不到监听时,但现在又不能移除监听,这时就可以将flg设置为false不然监听事件的方法执行任何逻辑
代码。这样虽然没有根本移除监听,但对要经常在一个容器或组件上反复使用和取消监听的菜鸟是个很
不错的解决方法!!!
我们继续用代码来实例为在mxml中的组件不能用xx(Id).removeEventListener(xxxEvent,fun)移除
和哪些情况可以移除,请阅读下面实例:(自定义监听事件参数,和移除监听)
我们知道FLEX添加监听事件,会经常使用到,但是常见的方法,并不能自定义参数。我收集到一个非常好的方法。可以在监听的时候,添加自己喜欢的参数。好吧,我们开始第一个
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
- <fx:Script>
- <![CDATA[
- import mx.controls.Alert;
- public var count:int=0;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- bt2.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void
- {
- clickPar(event,20,30);
- });
- }
- protected function clickPar(event:MouseEvent,x:int,y:int):void
- {
- count++;
- ta.text+="被调用了"+count+"次"+"x:"+x+"y:"+y+"\n";
- }
- ]]>
- </fx:Script>
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="64" y="40" label="按钮1" click="button1_clickHandler(event)"/>
- <s:Button x="63" y="97" label="按钮2" id="bt2"/>
- <s:TextArea x="217" y="32" id="ta"/>
- </s:Application>
点击按钮1,为按钮2,添加相应的监听事件,点击一次按钮一,将会增加一次对按钮2的监听。这样我们就可以实现监听事件的时候,传递相关参数。问题来了,我们现在需要移除监听。好吧,我们继续,按照我们常规的做法,就是把这个函数再写一遍就是了。
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
- <fx:Script>
- <![CDATA[
- import mx.controls.Alert;
- public var count:int=0;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- bt2.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void
- {
- clickPar(event,20,30);
- });
- }
- protected function clickPar(event:MouseEvent,x:int,y:int):void
- {
- count++;
- ta.text+="被调用了"+count+"次"+"x:"+x+"y:"+y+"\n";
- }
- protected function button3_clickHandler(event:MouseEvent):void
- {
- bt2.removeEventListener(MouseEvent.CLICK,function(event:MouseEvent):void
- {
- clickPar(event,20,30);
- });
- }
- ]]>
- </fx:Script>
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="64" y="40" label="按钮1" click="button1_clickHandler(event)"/>
- <s:Button x="63" y="97" label="按钮2" id="bt2"/>
- <s:TextArea x="217" y="32" id="ta"/>
- <s:Button x="63" y="155" label="按钮3" click="button3_clickHandler(event)"/>
- </s:Application>
其实function(event:MouseEvent):void
{
clickPar(event,20,30);
}
这是一个匿名函数,虽然写的是一模一样,但是函数地址是不一样的,所以说,移除的不是你添加的,这句话你明白了吗?我似乎听见,都在说,small case。
解铃还须系铃人,我们把那个监听的函数给记住,然后不就可以了吗!对。这个匿名函数,怎么能得到他呢。当然我们可以查一下帮助文档,arguments 出现在我们面前,为什么我会知道这个东西呢?当然,我写这篇文章之前,我都从网络上搜索好了,实现方法是什么,所以知道该查什么。
callee |
property |
public var callee:Function
Language Version: | ActionScript 3.0 |
Runtime Versions: | AIR 1.0, Flash Player 8, Flash Lite 4 |
A reference to the currently executing function.
下面稍微修改一下,就可以移除了。
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
- <fx:Script>
- <![CDATA[
- import mx.controls.Alert;
- public var count:int=0;
- public var ft:Function;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- bt2.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void
- {
- clickPar(event,20,30,arguments.callee);
- });
- }
- protected function clickPar(event:MouseEvent,x:int,y:int,fn:Function):void
- {
- ft=fn;
- count++;
- ta.text+="被调用了"+count;
- }
- protected function button3_clickHandler(event:MouseEvent):void
- {
- bt2.removeEventListener(MouseEvent.CLICK,ft);
- }
- ]]>
- </fx:Script>
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="64" y="40" label="按钮1" click="button1_clickHandler(event)"/>
- <s:Button x="63" y="97" label="按钮2" id="bt2"/>
- <s:TextArea x="217" y="32" id="ta"/>
- <s:Button x="63" y="155" label="按钮3" click="button3_clickHandler(event)"/>
- </s:Application>
我总感觉,Flex与JS有太多的相似性,当我不熟悉Flex的时候,我就向JS想,看看能不能有什么突破点没。
发表评论
-
BlazeDS的功能原理及配置实例
2013-05-01 23:26 1186BlazeDS Test Drive里面示例了主要的功能: ... -
Flex与Severlet(Jsp)通信传递中文参数乱码问题的解决
2013-02-19 15:51 726Java代码 var url ... -
Java与Flex建立Socket连接
2013-02-17 23:42 898Socket与其他的通信技术最大的不同是Socket连接在数 ... -
Ubuntu上搭建Flex4的开发环境
2013-02-15 20:58 1242原文出自:http://www.brighthub.com/ ... -
flex web应用程序生成自定义右键菜单
2013-01-25 17:13 1108屏蔽浏览器的鼠标右键,同时监听鼠标右键,当触发右键点击事件的 ... -
Flex通过HTTPService与servlet通信
2013-01-16 15:03 1036Flex通过HTTPService与servlet通信 ... -
flex摄像头连接视频录制
2012-12-25 23:55 1661Flex提供了3个类实 ... -
Flex中多线程的实现(摘)
2012-12-25 19:49 1307Flex中多线程的实现 最近在网上看到一个工具 ... -
flash builder 4.7 install for windows 8
2012-12-23 01:02 1342之前在自己的win8上集成fb到myecl ... -
flex load map
2012-12-21 15:48 1017ArcGIS Server flex加载google地图 ... -
Flex与JavaScript交互调用函数
2012-12-21 09:43 896一、在JavaScript中调用Flex方法 在 Flex ... -
Flex中TitleWindow关闭按钮CloseButton的定制问题
2012-11-29 16:01 1212问题:TitleWindow的关闭 ... -
flex学习之联动下拉框实现
2012-11-27 12:55 1323Java代码 TbArea.java ... -
flex中弹出确认对话框
2012-11-22 16:30 864Xml代码 <?xml versi ... -
Flex(ActionScript3)解析XML
2012-11-20 17:21 714正文: 对于如下的一个XML文档,在flash中应该怎么读呢 ... -
MessageBroker /amf
2012-11-20 10:58 947MessageBroker 我们称他为信息经纪人,它职责就是把 ... -
Flex3 组件的定位和布局
2012-11-18 19:22 805Flex 组件的定位和布局 大多数 Flex 容器使用预定义 ... -
Flex异步令牌AsyncToken的用法介绍
2012-11-15 09:28 738什么是AsyncToken?官方文档是这样描述的:" ... -
Flex布局简介
2012-11-14 14:38 833★设置组件布局 对于所有的继承自UIComponent的组件包 ... -
Flex编程注意之直接获取某个组件的对象(this[]用法)
2012-11-14 13:09 670有这样一个需求:假如你new了一百次Button,同时这 ...
相关推荐
3. **添加和移除监听器**:使用`addEventListener`方法添加监听器,需要提供事件类型、处理函数以及可选的冒泡标志和捕获标志。移除监听器则使用`removeEventListener`方法,确保在不再需要监听事件时释放资源。 4....
2. 及时移除监听器:当组件不再需要监听事件时,应立即移除监听器,以释放资源。 3. 使用事件命名约定:为自定义事件提供清晰的命名,以便其他开发者能快速理解其用途。 通过深入理解并掌握以上Flex事件机制的关键...
8. **事件移除**:使用`removeEventListener`方法可以在不再需要监听特定事件时移除监听器,以提高性能。 9. ** bubbling 和 non-bubbling 事件**:并非所有事件都会冒泡。例如,`change`事件在`ArrayCollection`中...
当不再需要监听特定事件时,应移除监听器以释放资源。这可以通过`removeEventListener`方法完成: ```actionscript myButton.removeEventListener(MouseEvent.CLICK, buttonClickHandler); ``` 9. **...
7. **事件处理**:Flex的事件模型基于事件监听器,开发者可以通过添加和移除监听器来响应特定的事件,如点击事件、键盘事件等。 8. **MXML**:MXML是一种声明式语言,类似于HTML,用于构建Flex用户界面。它可以与...
3. 事件监听器的处理:注册事件监听器时,一定要记住在不再需要监听事件时移除监听器。可以使用 removeEventListener 方法来做到这一点。 4. 方法参数的引用:如果方法接收对象作为参数,并且在方法内部创建了对...
7. **移除监听器**:为了优化性能,当组件不再需要右键菜单时,记得移除事件监听器。 通过以上步骤,你就可以在Flex的非Application组件上成功使用RightClickManager实现右键菜单。这个过程涉及到事件处理、组件...
例如,如果组件中包含事件监听器,应当在组件移除时也解除这些监听器。 8. **记录和取消记录** - 如果使用了记录功能(如`BindingUtils.bindSetter()`或`ChangeWatcher.watch()`),那么在不再需要这些功能时,...
4. 事件移除:在不再需要监听特定事件时,使用removeEventListener()方法移除监听器,避免内存泄漏。 三、用户登录示例 在这个例子中,我们有两个自定义组件:LoginForm组件负责接收用户输入和验证登录信息,...
事件可以通过`addEventListener`添加监听器,`removeEventListener`移除监听器,以及`dispatchEvent`发送自定义事件。 7. Flex与AMF:AMF(Action Message Format)是Adobe开发的一种二进制数据交换格式,常用于...
理解Event和EventListener接口,以及如何添加和移除事件监听器,是编写响应式应用的重要环节。 7. **服务请求与数据访问** Flex可以使用HTTPService或WebService组件与服务器进行通信,获取或提交数据。学习AMF...
在Flex中,事件是用于传递信息的结构化对象,它们从一个源头(通常是组件)发送到其他感兴趣的接收者(监听器)。理解Flex事件的工作流程对于创建响应式和交互式的用户界面至关重要。 首先,让我们深入探讨Flex事件...
标题中的“Flex学习资料(续)”表明这是一个关于Adobe Flex技术的进阶学习资源,Flex是一种用于构建富互联网应用程序(RIA)的框架,基于ActionScript和MXML。它允许开发者创建交互性强、功能丰富的Web应用。 描述...
尽管有垃圾回收机制,但开发者仍需要注意可能导致内存泄漏的问题,例如循环引用、事件监听器未正确移除、静态变量引用等。这些情况都可能导致对象无法被正确回收。 6. **优化策略** - 使用弱引用:弱引用不会增加...
同时,添加事件监听器来处理用户交互,如点击添加按钮或列表项时触发的事件。 综上所述,这个`FLEXList`项目展示了如何使用Flex的`List`组件来创建一个具有动态添加、删除功能的列表,并且通过视觉特效增强了用户...
2. 当窗口失去焦点时,需要移除事件监听器,防止内存泄漏。 3. 考虑边界限制,可能需要在更新位置时检查面板是否超出父容器的边界,并进行相应的调整。 通过以上讲解,我们可以了解到在Flex中实现面板拖拽的基本...
总结一下,"flex拖动树形"是一个利用Flex框架中的DragManager和DropTarget实现的交互式树形控件,用户可以将树形结构中的节点从左选项框拖放到右选项框。这个特性需要对Flex组件、事件处理和数据绑定有深入理解,...
添加事件监听器通常用`addEventListener`方法,移除则用`removeEventListener`。例如,`button.addEventListener(MouseEvent.CLICK, handleClick);` 将点击事件与`handleClick`函数关联。 4. **实例代码**: 压缩包...
3. **事件处理**:AS3中的事件模型是基于监听器的,理解如何添加和移除事件监听器,以及处理各种事件(如点击、键盘输入等)是关键。 4. **Flex SDK**:Flex SDK是一个免费的开发工具包,包括编译器、Flex Builder...
`addEventListener`允许动态添加和移除事件监听器,而MXML则提供了更直观的声明式绑定。事件处理程序通常包含一个参数,即事件对象,通过这个对象可以获取事件的详细信息。 3. 事件对象 每个事件都对应一个事件对象...