如何从 itemRenderer 中分派事件[Flex][翻译]
原文:How to dispatch an event from a custom item renderer
从 MXML 组件中分派事件并不困难,但是想要从 itemRenderer 中分派事件就没有那么直接了。下文中,我们将回顾一下这两种情况的处理方式并找出一个合适的解决方案。
正常情况下,当你想从 MXML 组件中分派一个事件时会使用如下的元数据标签:
<!-- 写在某个组件中 -->
<mx:metadata>[Event(name="myEvent")]</mx:metadata>
元数据标签让你能在另一个类中以如下方式监听事件:
<!-- 写在调用上面定义的那个组件的类中 -->
<nw:somecomponent myEvent="onSomeEventHandler(event)"/>
最后,当你想在组件中分派事件时可以手工的使用 dispatchEvent() 方法来分派。
但是如果你是想从一个作为 itemRenderer 的组件中分派事件的话会如何呢?考虑一下以下的情况:
在 Flex 应用程序中新建一个 List 组件。然后新建一个包含有 RadioButton 的组件用于 List 的 itemRenderer。当用户单击 RadioButton 时,可能你会想让他的父组件 List 产生一个事件。
但是如下的代码会产生一个编译器错误,因为 List 组件并没有“myEvent”属性:
<!-- 会产生一个编译器错误 -->
<mx:list id="myList" dataprovider="{listData}"
itemRenderer="uk.nwebb.CustomRenderer"
myEvent="onSomeEventHandler(event)" />
由于我们并没有实例化自己的 itemRenderer,如何才能获得广播出来的事件呢?要想实现这样的功能,必须通过下面的两个步骤:
首先,我们必须让我们分派的事件上浮,只要在方法中添加一些而外的参数就可以做到。如下设置 bubble 和 cancelable 参数:
//写在某个组件中
dispatchEvent("myEvent", true, true);
//由于原文比较老,上面这个写法是 Flex 2 的。Flex 3 的后面两个参数要赋到 Event 实例里面。
//Flex 3 代码如下
dispatchEvent(new Event("myEvent", true, true));
现在 List 组件仍然还是没有 myEvent 属性。为了能让 List 组件接收到上面分派的事件,我们必须确保这个 List 组件有 ID,然后可以在初始化函数或者 creattionComplete 函数中绑定事件:
//写在创建 List 组件的类中
private function onInit():void
{
myList.addEventListener("myEvent", myEventHandler);
}
据我所
相关文档:
原帖:http://hi.baidu.com/flex2/blog/item/3501c1622af2b1dde6113aef.html
现在不少人开始关注并学习Flex了(至少比以前多了),但是现在关于Flex的资料并不多,国内的资料就更少了,而且Flex的论坛人气都差的很,一眼望去全都是提问帖子,回帖超过5个的寥寥无几,惨不忍睹啊。我翻译一些东西也是为了增加中文学习资料, ......
1. release时去掉所有trace信息和logger信息,否则影响性能
2. 如果报无法访问本地文件或swf 在compile里面写 -use-network=false
3. 实现component真正隐藏除了设置visible=false外还需要设includeInLayout = false
4. 设手型有时出来设buttonMode="true" useHandCursor="true" 还要设mouseChildren="false"
5. fo ......
最近用flex来做一个工作流定义编辑器。在网上找了很多例子,也学到了不少东西。
flex是adobe公司出的对于flash的一个产品。对于学过java的人来说再简单不过了。这里也不多说了,就对于这几天在项目中遇到的问题谈一下自己的解决方法与认识。
一、flex中将自己的一个Canvas变成为图片,保存到本地。
var bitmapData ......
基本事件处理
用于指定为响应特定事件而应执行的特定操作的技术称为事件处理。在编写执行事件处理的 ActionScript 代码时,您需要识
别三个重要元素:
• 事件源:发生该事件的是哪个对象?例如,哪个按钮会被单击,或哪个 Loader 对象正在加载图像?事件源也称为事件目
标,因为 Flash Player 或 AIR 将此对象作为 ......
样张图:
使用方法:
设置Application标签的preloader为 MyComponent.MyDownloadProgressBar
<mx:Application preloader="MyComponent.MyDownloadProgressBar" >
下面是MyDownloadProgressBar.as的代码:
package MyComponent
{
import flash.display.*;
import flash.events.*;
import flash.filte ......