如何在Flex 4中创建冒泡自定义事件?
要在MXML中创建和公开自定义事件,您需要在将使用以下行分派事件的组件中声明它:
<fx:Metadata>
[Event(name="select", type="my.engine.events.SelectionEvent")]
</fx:Metadata>
这允许您:
<my:CustomComponent select="doSomething()"/>
但是,你如何使这个泡沫向上。我想这样做
<s:DataGroup select="doSomethingForAll();">
<s:itemRenderer>
<fx:Component>
<my:CustomComponent/>
</fx:Component>
</s:itemRenderer>
</s:DataGroup/>
谢谢!
答案 0 :(得分:1)
您的自定义事件必须扩展事件。在构造函数上,您会找到name:string
,bubbling:boolean
和cacellable:boolean
作为参数。
将bubbling参数设置为true。在您的示例中,元数据标记必须位于DataGroup标记中。
答案 1 :(得分:0)
一个可能的解决方案,但不完全是我想要的是在DataGroup级别添加这行代码。
this.addEventListener(SelectionEvent.SELECTED, onSelect);
这将确保CustomComponent触发的所有事件都是正确的。
答案 2 :(得分:0)
您可以使用内置于扩展类中的指定自定义元标记数据信息扩展s:DataGroup容器,也可以从itemRenderer的“select”事件处理程序中调用“doSomethingForAll()”方法,请参阅下面的代码:
<s:DataGroup
dataProvider="{instructions}"
width="100%">
<s:itemRenderer>
<fx:Component>
<my:CustomComponent
select="rendererSelect()">
<fx:Script>
<![CDATA[
protected function rendererSelect():void
{
outerDocument.doSomethingForAll();
}
]]>
</fx:Script>
</my:CustomComponent>
</fx:Component>
</s:itemRenderer>
</s:DataGroup>
答案 3 :(得分:0)
捕获dataGroups select事件,然后调度doSomethingForAll()
确保doSomethingForAll事件将其bubbling属性设置为true。
然后将调用在显示列表中监听其上方的doSomethingForAll的任何事件侦听器。