`
JavaCrazyer
  • 浏览: 3008896 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Flex4之关于循环注册事件问题

阅读更多

首先呢,标题说的有些模糊,其实我关键的意思就是对于循环里面注册事件的处理方式,其实呢我自己是不会写的

我之前写的就像这样:

<?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" 
   creationComplete="init()"> 

<fx:Script> 
<![CDATA[ 
import mx.controls.Alert; 
import mx.controls.Button; 
function init():void{ 

  for(var i:int=0;i<10;i++){ 
   var btn:Button=new Button(); 
   btn.x=i*20; 
   btn.y=i*20; 
           btn.width=i*40; 
   btn.height=i*20; 
   
   this.addElement(btn); 
   
   btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){ 
                 click(String(i));    
   } 
   ); 
   
  
  } 
  
} 

function click(str:String){ 
Alert.show(str); 
} 


]]> 
</fx:Script> 

<fx:Declarations> 
<!-- 将非可视元素(例如服务、值对象)放在此处 --> 
</fx:Declarations> 

</s:Application> 

  初始化时往页面上循环增加十个不同按钮,然后给每个按钮注册一个事件,点击按钮实现操作效果不同,比如上边我就想实现的是点击第一按钮弹出0,点击第二个弹出2....但是实际结果是点击十个按钮显示的都是同一个数字

所以到了问答频道问了问题,一会便有高手回答,他的原话是这样

btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){
                 click(String(i));  
   }
   );

闭包中获得的i不是当前循环的i,而是当你点击按钮触发事件时,i的值。。
flex很奇怪,在for循环中定义的i,在外部同样可以获得。
正确的写法应该这样:

function init():void{			
				for(var i:int=0;i<10;i++){
					var btn:Button=new Button();
					btn.x=i*40;
					btn.y=i*20;
					btn.width=40;
					btn.height=20;			
					this.addChild(btn);				
					btn.addEventListener(MouseEvent.CLICK,clickfunc(i));				
				}	
			}
			function clickfunc(arg):Function{
				var func=function(e):void{
					click(arg)
				}
				return func;
			}
			
			function click(str:String){
				Alert.show(str);
			}

 

其实我也没搞懂他说的啥意思,反正效果实现了,谁如果清楚原理,请不吝赐教

2
2
分享到:
评论
1 楼 zhong_pro 2011-12-02  
其实js也这样闭包的。

相关推荐

    flex4 订阅 发布 机制 实例 (lib )

    在Flex4中,我们还可以利用`WeakReference`来弱引用事件监听器,防止因循环引用导致的内存泄漏问题。另外,Flex4提供了多种内置事件类型,如`Event.CHANGE`、`MouseEvent.CLICK`等,开发者也可以自定义事件类型。 ...

    flex3语言参考手册

    在Flex3语言参考手册中,你可以找到关于以下关键知识点的详细信息: 1. **ActionScript 3.0基础**:ActionScript是Flex的核心编程语言,AS3是其最新版本,提供了更严格的类型检查和面向对象的特性。学习AS3的基础...

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

    Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当...通过谨慎处理对象引用、正确管理事件监听器和利用调试工具,可以有效地减少 Flex 应用中的内存泄露问题,从而提高应用的性能和稳定性。

    FLEX内存释放优化原则

    - 释放一个对象时,如果该对象注册了任何事件监听器,则必须先解除这些监听器。未清除的监听器可能会导致对象无法被正确回收,从而占用不必要的内存资源。 5. **确保程序终止前释放所有资源** - 在程序终止前,...

    Flex AS3.2手册

    Flex AS3.2手册是Adobe官方提供的一份关于FLEX 3.2开发的重要参考资料,主要针对使用ActionScript 3.0编程语言进行Flash应用程序开发的开发者。这份手册以HTML格式呈现,方便开发者在线查阅和搜索,使得学习和开发...

    ArcGIS For Flex 地图联动

    3. 监听地图事件:使用 `addEventListener` 方法,注册地图的 `extentChange` 或 `panEnd` 事件,以便在地图变化时执行联动操作。 4. 联动处理:在事件处理函数中,获取当前地图的新状态(如范围、中心点),并应用...

    Flex开发实例--学习必备

    根据给定的文件信息,我们可以总结出一系列关于Flex开发的基础知识点和特定实例,适用于初学者。以下是详细的知识点概述: ### Flex开发基础 #### 1. Flex简介 - **Flex** 是一种开源框架,用于构建高质量的Web...

    flex题目技巧,面试经典篇

    AS3事件机制基于事件冒泡和捕获,事件从最深层的节点向上传播到顶级节点,然后逆向传播,让所有注册了相应事件处理函数的对象都有机会响应。 5. **addEventListener方法**: 它接受四个参数:事件名、事件处理...

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

    【幻想-Flex3基礎視頻教程第二部_教程源碼(a)】是一个关于Flex3开发的教育资源,由airhand@gmail.com原创并免费提供,旨在帮助学习者深入理解Flex3编程。Flex是Adobe公司推出的一种用于构建富互联网应用程序(RIA)...

    Flex入门实例教程

    ### Flex入门实例教程知识点概述 #### 一、Flex简介 - **定义与特点**:Flex是一种开源框架,用于构建高质量的Web应用程序,并可跨浏览器、操作系统和设备进行部署。它结合了HTML、JavaScript和Flash Player的功能...

    flex如何进行内存优化

    在开发Flex应用时,合理的内存管理是提高应用性能的关键因素之一。本文将基于提供的文件信息,深入探讨如何更好地优化Flex内存使用,并通过具体实例阐述如何编写更加高效的Flex代码。 #### 一、内存释放 1. **及时...

    FLEX/FLASH ActionScript3 PPT讲义以及基于FLASH源码

    3. **事件处理**:ActionScript3.0中的事件模型,如何注册和监听事件,以及处理不同类型的事件,如鼠标点击、键盘输入等。 4. **显示对象和舞台**:了解DisplayObject类和DisplayObjectContainer类,以及如何在舞台...

    Flex 3 组件实例与应用(2009版)

    ### Flex 3 组件实例与应用(2009版) #### 一、概述 《Flex 3 组件实例与应用》是一本针对初学者学习Adobe Flex 3框架及其组件的指南书籍。这本书由作者Dason编写,内容覆盖了Flex 3中的多种组件及其用法,并通过...

    ActionScript3.0的资料

    `flashbuilder4Q_airiabook.pdf`可能是使用Flash Builder 4进行Flex应用开发的指南,Flash Builder是Adobe提供的集成开发环境(IDE),支持ActionScript 3.0和Flex框架,方便开发者进行代码编辑、调试和项目管理。...

    flash_action3_with_example 中文版

    3. 事件处理:AS3使用事件驱动模型,通过addEventListener和removeEventListener来注册和移除事件监听器。 4. 包(Package):用于组织代码,如`package com.example { ... }`。 三、AS3核心类库 1. DisplayObject...

    ActionScript开发技术大全

    - **事件对象**:事件对象包含了关于事件的信息,例如事件类型、目标和相关数据,它们在事件处理函数中被传递。 4. **ActionScript与Flash Player** - **Stage和DisplayObject**:学习如何在舞台上添加和操作显示...

    stay-alive-and-flex-your-time

    3. **协程或事件处理模块**:可能有单独的文件如`coroutine_manager.lua`或`event_loop.lua`,用于管理和驱动协程或事件循环。 4. **任务定义**:如`tasks/*.lua`,每个任务是一个单独的脚本,它们被主脚本调度并在...

    ActionScript3.0 编程

    4. **事件处理**:ActionScript 3.0的事件模型是基于事件监听器的,了解如何注册和移除事件监听器,以及各种常见事件(如click、keydown、load等)的处理。 5. **显示对象和舞台**:掌握DisplayObject类层次结构,...

Global site tag (gtag.js) - Google Analytics