flex的事件功能很强大,自定义的事件可以传输任何我想要的数据作为参数,但是对于系统事件,我想要传一些额外的参数时应该怎么办呢?网上查到的方法一般是采用闭包特性,即采用如下方法:
this.addEventListener(LoadDataEvent.LOADDATA_EVENT,function(event:Event):void{
abc(arg1, arg2);
});
当然对于用户自定义事件想要传递事件包含信息之外的参数,也是可以使用这种方法的。这种方法大部分情况下都是可以使用的,但是我在实验中却遇到了属于少部分的例外情况。
实验场景如下:有一个FileReference的ArrayCollection,对这个ArrayCollection中的每一个FileReference进行load操作,在每一个FileReference加载完成后进行一些操作,例如输出当前FileReference在ArrayCollection中的下标。原始代码如下:
privae function loadf():void
{
var index:int = 0;
for(var i:int=0; i<arr.length;i++)
{
index = i;
file:FileReference = arr.getItemAt(i) as FileReference;
file.addEventListener(Event.COMPLETE, function(e:Event):void{onCompleted(e,index)});
file.load();
}
}
private function onCompleted(e:Event,i:int):void
{
Alert.show(“第”+(i+1)+”个文件加载完成”);
}
假设有3个比较大的文件,那么运行上面的代码,得到的结果就是3个Alert提示输出的均为“第3个文件加载完成”。究其原因,我们推测,flex在使用index时并不是使用的值,而是指出了index值存储的位置,当实际使用它的值的时候再到该位置去取(不确定flex是否如此操作的,只是这么解释看似比较合理),那么当前两个文件都加载完成之后,index的值早已经是2了,所以Alert输出的内容只能是3。
当然上面例子里这个index是完全没有必要的,我只是为了说明问题将它放到这里的。
目前我想到的解决上述问题的方法,是创建一个新的类,其参数为一个FileReference和一个index,对FileReference的COMPLETE事件捕获后添加index参数再发出一个新的事件。例如新类为NewFileStruct,参数为:
private var _f:FileReference;
private var _fileIndex:int;
在构造函数中注册FileReference的Event.COMPLETE事件的监听函数,监听函数内容如下:
private function onComplete(e:Event):void
{
var mycom:myComplete = new myComplete(myComplete.ANASEL);
mycom.myfile = _f;
mycom.fileIndex = _fileIndex;
mycom.dispatch();
}
myComplete是自己写的事件,参数为:
public var myfile:FileReference;
public var fileIndex:int;
在使用NewFileStruct时便可以监听myComplete事件来达到传递fileIndex参数的目的。
分享到:
相关推荐
如果希望启用捕获阶段,需要在注册监听器时指定`use_capture`参数为`true`。 #### 结论 理解和熟练掌握Flex的事件机制对于构建高效、响应迅速的应用程序至关重要。通过合理利用事件的捕获、目标和上浮三个阶段,...
事件监听器可以通过 `addEventListener` 方法添加到组件上,它接受三个参数:事件类型、处理函数和一个布尔值,决定是否阻止事件的默认行为。监听器可以添加在组件的整个生命周期内,也可以在需要时动态添加或移除...
4. **注册事件监听器** - 要响应自定义事件,需要在目标组件上添加事件监听器。可以使用`addEventListener()`方法,传入自定义事件的类型、监听函数和可选的捕获阶段参数。 5. **处理事件** - 监听函数将被调用,...
事件监听器可以在任意阶段注册,以决定何时处理事件。 7. 事件阻止和事件冒泡停止: 使用event.stopPropagation()可以阻止事件继续冒泡到父组件,而event.preventDefault()可以防止事件的默认行为,比如链接的跳转...
在Flex中,有两种方式添加事件监听器:使用`addEventListener`方法或在MXML组件标记中使用`event`属性。`addEventListener`允许动态添加和移除事件监听器,而MXML则提供了更直观的声明式绑定。事件处理程序通常包含...
3. **窗口间通信**:在文件名“组间通信的传输参数.rar”中,可能包含了关于不同Flex窗口之间数据交换的示例。在Flex应用中,如果需要在多个窗口之间传递数据,可以使用Event Bus(事件总线)、LocalConnection对象...
首先,`.actionScriptProperties`文件是Flex Builder项目的配置文件,用于存储关于ActionScript编译器和调试器的设置。这包括源路径、库路径、编译选项等,对于理解和构建项目环境至关重要。 `.flexProperties`文件...
监听器通常会有一个接收事件参数的方法,如`setinfo`,在这个方法中,我们可以访问事件携带的数据并执行相应的处理逻辑。 7. **事件取消**: 如果事件的`cancelable`属性设置为`true`,那么在事件处理过程中,可以...
为了响应自定义事件,我们需要在感兴趣的组件上添加事件监听器。例如,在另一个MXML文件中,我们可以这样监听`MY_CLICK`事件: ```xml *"> <![CDATA[ import ascode.MyEvent; import mx.controls.Alert; ...
在Flex中,我们可以为UI组件添加事件监听器,当用户点击图标时触发相应的播放方法。这可能涉及到使用Event类的dispatchEvent和EventListener接口。 至于导出嵌入网页,Flex应用程序可以编译成SWF格式,这是Adobe ...
- **在MXML中添加事件监听器**:教授如何在MXML中注册事件监听器,以响应用户交互或其他触发事件。 - **在ActionScript中设置MXML定义的子属性**:演示如何从ActionScript代码中访问和修改在MXML中定义的组件属性。...
在MXML中,可以使用`(event)"/>`语法添加事件监听器,其中`event`是事件对象,`myHandler`是处理事件的方法。这种方法简化了事件绑定过程,使代码更易于理解和维护。 #### 1.6 创建类型化的向量 类型化的向量...
HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置: 清单 4. 定义 Flex Listener <listener> <listener-class>flex.messaging.HttpFlexSession...
3. **注册事件监听器**:为了响应自定义事件,需要在目标对象上添加事件监听器。可以使用addEventListener方法,传入自定义事件的类型、处理函数和可选的优先级: ```actionscript addEventListener(CustomEvent.MY...
- Flex提供了多种布局管理器,如`VerticalLayout`、`HorizontalLayout`等,可以帮助开发者轻松管理界面元素的排列。 #### 3. **Canvas控件** - `Canvas`控件可以作为其他控件的容器,提供灵活的布局方式,特别...
通过 RemoteObject 进行调用虽然简单,但存在不少问题:首先,RemoteObject 是一个 Dynamic Class,Flex Builder 的编译器无法替我们检查参数类型和参数个数,这样,在编写 ActionScript 代码时极易出错。...
Flex客户端会将文件数据和额外参数发送到PHP脚本,PHP负责接收文件、存储到服务器以及返回上传状态。在PHP中,可以使用`$_FILES`全局数组来获取上传文件的信息。确保文件安全性和防止恶意攻击,如大小限制、文件类型...
1. **在线IDE支持**:Arc Flex 提供了一个基于Web的开发环境,开发者无需安装额外软件,即可在线编写、调试和运行代码,提高开发效率。 2. **API 文档与示例**:平台提供详尽的API文档,包括函数介绍、参数说明和...
开发者通常会利用Flex提供的事件监听器来实现这些功能,例如`netStatus`事件可以用来检测视频的加载状态,`playheadUpdate`事件则用于跟踪播放进度。 在`player`文件夹下,可能包含了播放器的源代码,包括自定义的...