`
nianshi
  • 浏览: 420775 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

flex3移除事件监听器

    博客分类:
  • Flex
阅读更多
移除事件监听器
        
         对于任何一个处理器,如果不再使用就将它移除,是一个好主意。移除对象的引用,即可清理内存。你可以使用 removeEventListener() 方法来移除一个你不再需要的事件处理器。所有可以掉红 addEventListener() 方法的组件也可以调用 removeEventListener() 方法。 removeEvenetListener() 方法的语法如下:
componentInstance.removeEventListener(event_type:String, listener_function:Function,
use_capture:Boolean)
         考虑下面的代码:
myButton.removeEventListener(MouseEvent.CLICK, myClickHandler);
        
         event_type listener_function 参数是必须的。它们与 addEventListener() 方法的必须的参数相同。
         use_capture 参数同样与 addEventListener() 方法中的 use_capture 参数相同。
         回想一下,你可以通过调用两次 addEventListener() 方法,一次将 use_capture 设置为 true ,另一次将 use_capture 设定为 false ,来对事件的各个阶段进行监听。要移除这两个监听器,就必须调用 removeEventListener() 方法两次:一次将 use_capture 参数设置为 true ,另一次将 use_capture 参数设定为 false
         下面的简单程序展示了哪些类型的处理器可以被移除,哪些类型的不能被移除:
<!-- events/RemoveEventListenerExample.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="createHandler(event)">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function createHandler(e:Event):void {
b1.addEventListener(MouseEvent.CLICK, myClickHandler);
}
private function removeMyHandlers(e:Event):void {
/* Remove listener for b1's click event because it was added
with the addEventListener() method. */
b1.removeEventListener(MouseEvent.CLICK, myClickHandler);
/* Does NOT remove the listener for b2's click event because it
was added inline in an MXML tag. */
b2.removeEventListener(MouseEvent.CLICK, myClickHandler);
}
private function myClickHandler(e:Event):void {
Alert.show("The button was clicked.");
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me"/>
<mx:Button label="Click Me Too" id="b2" click="myClickHandler(event)"/>
<mx:Button label="Remove Event Listeners" id="b3" click="removeMyHandlers(event)"/>
</mx:Application>

 

创建事件处理器类
         你可以创建一个外部类文件将类中的方法作为事件处理器使用。对象本身不是事件处理器,但对象的方法可以是。定义一个处理所有事件的类,相同的事件处理逻辑就可以在程序中通用。这样,可以使增强你的 MXML 程序的可读性和可维护性。
         要创建一个类来处理事件,你通常需要引入 flash.events.Event 类。通常,你还要些一个空的构造函数。下面的 ActionScript 类文件中,每当 handleAllEvents() 方法处理一个事件的时候,就调用 Alert 控件的 show() 方法:
// events/MyEventHandler.as
package { // Empty package.
import flash.events.Event;
import mx.controls.Alert;
public class MyEventHandler {
public function MyEventHandler() {
// Empty constructor.
}
public function handleAllEvents(event:Event):void {
Alert.show("Some event happened.");
}
}
}
         在你的 MXML 文件中,定义一个 MyEventHandler 的实例,并且使用 addEventHandler() 方法注册为 Button 控件的点击事件的处理器。如下所示:
<?xml version="1.0"?>
<!-- events/CustomHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="createHandler()">
<mx:Script><![CDATA[
private var myListener:MyEventHandler = new MyEventHandler();
private function createHandler():void {
b1.addEventListener(MouseEvent.CLICK, myListener.handleAllEvents);
}
]]></mx:Script>
<mx:Button label="Submit" id="b1"/>
</mx:Application>
         最好将事件处理方法定义为静态的,这样你就不需要实例化类。下面的 createHandler() 方法不需要实例化 MyStaticEventHandler 类,就可以注册 handleAllEvents() 方法:
<?xml version="1.0"?>
<!-- events/CustomHandlerStatic.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="createHandler()">
<mx:Script><![CDATA[
private function createHandler():void {
b1.addEventListener(MouseEvent.CLICK, MyStaticEventHandler.handleAllEvents);
}
]]></mx:Script>
<mx:Button label="Submit" id="b1"/>
</mx:Application>
         在文件中,你只是为方法片段加上了 static 关键字:
// events/MyStaticEventHandler.as
package { // Empty package.
import flash.events.Event;
import mx.controls.Alert;
public class MyStaticEventHandler {
public function MyStaticEventHandler() {
// Empty constructor.
}
public static function handleAllEvents(event:Event):void {
Alert.show("Some event happened.");
}
}
}

         将你的事件监听器类保存在源文件路径中。你也可以将 ActionScript 类保存在和 MXML 文件相同的目录中,尽管 Adobe 并不推荐这样做。


 

 

分享到:
评论

相关推荐

    flex 关于事件的例子

    3. **事件监听器** 事件监听器是通过添加到组件上的方法,用于响应特定事件。在MXML中,可以使用`&lt;mx:addEventListener&gt;`标签添加监听器,或者在ActionScript代码中调用`addEventListener`方法。例如,添加一个点击...

    Flex Tree 的右键菜单事件

    为了监听这个事件,我们需要在Tree组件上添加事件监听器。代码示例如下: ```actionscript tree.addEventListener(Event.MENU_SHOW, onMenuShow); ``` `onMenuShow`函数是处理此事件的回调函数,其中我们可以根据...

    flex事件机制分析

    - 在不再需要监听事件时,记得移除事件监听器,以优化性能。 - 避免在事件处理函数中执行耗时操作,以免阻塞UI线程。 总结,Flex事件机制是构建交互性应用的基础,理解并熟练掌握它能够帮助开发者编写出更加高效、...

    Flex各自定义组件事件通讯例子

    4. 事件移除:在不再需要监听特定事件时,使用removeEventListener()方法移除监听器,避免内存泄漏。 三、用户登录示例 在这个例子中,我们有两个自定义组件:LoginForm组件负责接收用户输入和验证登录信息,...

    flexevent.rar_flex

    本文将深入探讨Flex事件的基础知识、事件模型、事件生命周期、事件监听器,以及如何自定义事件,旨在帮助初学者理解和熟练运用Flex的事件处理。 一、Flex事件基础 1. 事件模型:Flex采用的是基于发布/订阅...

    Flex 事件机制,flex入门学习

    监听器可以添加在组件的整个生命周期内,也可以在需要时动态添加或移除。 7. **自定义事件** 如果标准的事件类无法满足需求,可以自定义事件类继承自 `Event` 或其子类,如 `MouseEvent`、`KeyboardEvent` 等。...

    flex事件讲解

    在Flex中添加事件监听器,可以使用addEventListener方法,接收三个参数:事件类型、处理函数和可选的事件传递级别。例如,为一个Button组件添加点击事件监听器: ```actionscript button.addEventListener...

    Flex4.5事件机制

    DOM3事件机制包括四个主要部分:注册事件侦听器、发送事件、侦听事件和移除事件侦听器。以买鞋为例,买鞋的人是事件发送者,买鞋过程是事件,销售人员则是事件侦听器,而买鞋的类型(如皮鞋、运动鞋)则代表事件的...

    关于flex事件的讲解

    3. **事件监听器**:通过使用`addEventListener`方法,开发者可以为组件添加事件监听器。监听器是一个函数,它会在特定事件发生时被调用。例如: ```actionscript button.addEventListener(MouseEvent.CLICK, ...

    关于flex事件的讲解.rar

    3. **添加和移除监听器**:使用`addEventListener`方法添加监听器,需要提供事件类型、处理函数以及可选的冒泡标志和捕获标志。移除监听器则使用`removeEventListener`方法,确保在不再需要监听事件时释放资源。 4....

    flex-event.zip_flex

    在Flex中,事件是用于传递信息的结构化对象,它们从一个源头(通常是组件)发送到其他感兴趣的接收者(监听器)。理解Flex事件的工作流程对于创建响应式和交互式的用户界面至关重要。 首先,让我们深入探讨Flex事件...

    幻想-Flex3基礎視頻教程第二部_教程源碼(e)

    7. **事件驱动编程**:Flex应用基于事件驱动模型,学习者需理解事件的生命周期、事件监听器的添加和移除,以及如何自定义事件。 8. **动画与效果**:Flex 3提供了强大的动画和效果支持,如Tween类和Effect类,可以...

    flex 事件学习

    3. **事件监听器**: 添加事件监听器通常使用`addEventListener`方法,参数包括事件类型、处理函数和是否在捕获阶段处理。移除监听器则用`removeEventListener`。 4. **事件对象**: 每个事件都包含一些关键属性...

    flex 事件流原理

    同时,`removeEventListener`用于移除不再需要的监听器。事件处理函数接收的`event`对象提供了关于事件的详细信息,如触发事件的对象、位置等,可以根据需要使用。 了解并熟练掌握Flex事件流对于编写交互性强、响应...

    Flex4视频教程_02-01事件概述.rar

    6. **事件移除**:如果不再需要监听特定事件,可以使用`removeEventListener`方法移除监听器,以释放资源并避免未必要的处理。 7. **事件冒泡与事件阻止**:某些事件会沿着组件树向上冒泡,可以使用`...

    flex3_java 教程

    - **事件监听器**:学习如何添加和移除事件监听器。 #### 11. Event事件机制 - **事件传播**:解释事件的捕获阶段、目标阶段和冒泡阶段。 - **事件取消**:学习如何阻止事件的默认行为和传播过程。 - **自定义事件*...

    与大家分享一下Flex 学习资料 (续)

    根据压缩包子文件的文件名称“搜斧 - AS3事件处理机制.mht”,我们可以推断这个文件是一个关于AS3(ActionScript 3.0)事件处理机制的详细文档。AS3是Flex的主要编程语言,事件处理是其核心概念之一。事件驱动编程在...

    flex右键菜单RightClickManager 非Application也可以弹出

    7. **移除监听器**:为了优化性能,当组件不再需要右键菜单时,记得移除事件监听器。 通过以上步骤,你就可以在Flex的非Application组件上成功使用RightClickManager实现右键菜单。这个过程涉及到事件处理、组件...

    Flex 应用内存泄露的分析与诊断

    3. 事件监听器的处理:注册事件监听器时,一定要记住在不再需要监听事件时移除监听器。可以使用 removeEventListener 方法来做到这一点。 4. 方法参数的引用:如果方法接收对象作为参数,并且在方法内部创建了对...

Global site tag (gtag.js) - Google Analytics