我有一个带有DataGroup的MXML应用程序,如下所示:
<s:DataGroup id="productSelector"
dataProvider="{products}"
itemRenderer="renderers.ProductLineupRenderer"
>
<s:layout>
<s:HorizontalLayout/>
</s:layout>
</s:DataGroup>
我想知道我的itemRenderer中的项目何时被操纵。我有itemRenderer类调度自定义事件。
我以前做的是使用mx:repeater:
<mx:Repeater id="r" dataProvider="{configuration.products}">
<components:ProductEncapsulationView
product="{r.currentItem}"
highlightProduct="highlightProduct( event.selectedProduct )"
unhighlightProduct="clearHighlight()"
selectProduct="makeProductSelection( event.selectedProduct )"
</mx:Repeater>
我可以轻松地将来自itemRenderer类的事件分配到当前视图聚合组件中。 ( highlightProduct , unhighlightProduct , selectProduct )
我不确定如何在DataGroup甚至List组件中执行此操作。但是我想使用DataGroups布局和你使用spark框架获得的其他很棒的东西。
答案 0 :(得分:1)
从过去的帖子中读取到Adobe论坛(http://forums.adobe.com/message/2902862):
Shongrunden演示了如何从DataGroup对象中触发itemRenderer事件:
<s:ItemRenderer ... click="sendEvent()">
<fx:Script>
<![CDATA[
import spark.components.DataGroup;
private function sendEvent():void {
(owner as DataGroup).dispatchEvent(new MyCustomEvent());
}
]]>
</fx:Script>
...
</s:ItemRenderer>
在我看来,我可以通过在 DataGroup.creationComplete 期间添加自定义事件处理程序并从itemRenderer触发它们来实现此功能,如上所述。因为转发器示例为每个项目分配相同的处理程序功能,所以只要在该级别执行,谁调用这些函数并不重要。
它不像之前的MXML内联,需要更多的处理程序。但它确实允许使用火花组件作为例子。
答案 1 :(得分:1)
我就是这样做的:
<fx:Script>
<![CDATA[
import renderers.ProductLineupRenderer;
import spark.events.RendererExistenceEvent;
private function onRendererAdd(e:RendererExistenceEvent):void {
var renderer:ProductLineupRenderer = e.renderer as ProductLineupRenderer;
renderer.addEventListener("highlightProduct", highlighProduct);
}
private function highlightProduct(e:Event):void {
...
}
]]>
</fx:Script>
<s:DataGroup id="productSelector"
dataProvider="{products}"
itemRenderer="renderers.ProductLineupRenderer"
rendererAdd="onRendererAdd(event);">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
</s:DataGroup>
答案 2 :(得分:0)
您可以从bubble属性设置为true的项呈示器中调度事件。这意味着它们将到达数据组,或者您可以添加侦听器的数据组的父级。