首先呢,标题说的有些模糊,其实我关键的意思就是对于循环里面注册事件的处理方式,其实呢我自己是不会写的
我之前写的就像这样:
<?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);
}
其实我也没搞懂他说的啥意思,反正效果实现了,谁如果清楚原理,请不吝赐教
分享到:
相关推荐
在Flex4中,我们还可以利用`WeakReference`来弱引用事件监听器,防止因循环引用导致的内存泄漏问题。另外,Flex4提供了多种内置事件类型,如`Event.CHANGE`、`MouseEvent.CLICK`等,开发者也可以自定义事件类型。 ...
在Flex3语言参考手册中,你可以找到关于以下关键知识点的详细信息: 1. **ActionScript 3.0基础**:ActionScript是Flex的核心编程语言,AS3是其最新版本,提供了更严格的类型检查和面向对象的特性。学习AS3的基础...
Flex 应用内存泄露的分析与诊断主要集中在 Flex 应用程序中由于内存管理不当...通过谨慎处理对象引用、正确管理事件监听器和利用调试工具,可以有效地减少 Flex 应用中的内存泄露问题,从而提高应用的性能和稳定性。
- 释放一个对象时,如果该对象注册了任何事件监听器,则必须先解除这些监听器。未清除的监听器可能会导致对象无法被正确回收,从而占用不必要的内存资源。 5. **确保程序终止前释放所有资源** - 在程序终止前,...
Flex AS3.2手册是Adobe官方提供的一份关于FLEX 3.2开发的重要参考资料,主要针对使用ActionScript 3.0编程语言进行Flash应用程序开发的开发者。这份手册以HTML格式呈现,方便开发者在线查阅和搜索,使得学习和开发...
3. 监听地图事件:使用 `addEventListener` 方法,注册地图的 `extentChange` 或 `panEnd` 事件,以便在地图变化时执行联动操作。 4. 联动处理:在事件处理函数中,获取当前地图的新状态(如范围、中心点),并应用...
根据给定的文件信息,我们可以总结出一系列关于Flex开发的基础知识点和特定实例,适用于初学者。以下是详细的知识点概述: ### Flex开发基础 #### 1. Flex简介 - **Flex** 是一种开源框架,用于构建高质量的Web...
AS3事件机制基于事件冒泡和捕获,事件从最深层的节点向上传播到顶级节点,然后逆向传播,让所有注册了相应事件处理函数的对象都有机会响应。 5. **addEventListener方法**: 它接受四个参数:事件名、事件处理...
【幻想-Flex3基礎視頻教程第二部_教程源碼(a)】是一个关于Flex3开发的教育资源,由airhand@gmail.com原创并免费提供,旨在帮助学习者深入理解Flex3编程。Flex是Adobe公司推出的一种用于构建富互联网应用程序(RIA)...
### Flex入门实例教程知识点概述 #### 一、Flex简介 - **定义与特点**:Flex是一种开源框架,用于构建高质量的Web应用程序,并可跨浏览器、操作系统和设备进行部署。它结合了HTML、JavaScript和Flash Player的功能...
在开发Flex应用时,合理的内存管理是提高应用性能的关键因素之一。本文将基于提供的文件信息,深入探讨如何更好地优化Flex内存使用,并通过具体实例阐述如何编写更加高效的Flex代码。 #### 一、内存释放 1. **及时...
3. **事件处理**:ActionScript3.0中的事件模型,如何注册和监听事件,以及处理不同类型的事件,如鼠标点击、键盘输入等。 4. **显示对象和舞台**:了解DisplayObject类和DisplayObjectContainer类,以及如何在舞台...
### Flex 3 组件实例与应用(2009版) #### 一、概述 《Flex 3 组件实例与应用》是一本针对初学者学习Adobe Flex 3框架及其组件的指南书籍。这本书由作者Dason编写,内容覆盖了Flex 3中的多种组件及其用法,并通过...
`flashbuilder4Q_airiabook.pdf`可能是使用Flash Builder 4进行Flex应用开发的指南,Flash Builder是Adobe提供的集成开发环境(IDE),支持ActionScript 3.0和Flex框架,方便开发者进行代码编辑、调试和项目管理。...
3. 事件处理:AS3使用事件驱动模型,通过addEventListener和removeEventListener来注册和移除事件监听器。 4. 包(Package):用于组织代码,如`package com.example { ... }`。 三、AS3核心类库 1. DisplayObject...
- **事件对象**:事件对象包含了关于事件的信息,例如事件类型、目标和相关数据,它们在事件处理函数中被传递。 4. **ActionScript与Flash Player** - **Stage和DisplayObject**:学习如何在舞台上添加和操作显示...
3. **协程或事件处理模块**:可能有单独的文件如`coroutine_manager.lua`或`event_loop.lua`,用于管理和驱动协程或事件循环。 4. **任务定义**:如`tasks/*.lua`,每个任务是一个单独的脚本,它们被主脚本调度并在...
4. **事件处理**:ActionScript 3.0的事件模型是基于事件监听器的,了解如何注册和移除事件监听器,以及各种常见事件(如click、keydown、load等)的处理。 5. **显示对象和舞台**:掌握DisplayObject类层次结构,...