Events 数据组中自定义ItemRenderer事件的事件处理

Events 数据组中自定义ItemRenderer事件的事件处理,events,flex4,mxml,itemrenderer,Events,Flex4,Mxml,Itemrenderer,我有一个带有数据组的MXML应用程序,如下所示: <s:DataGroup id="productSelector" dataProvider="{products}" itemRenderer="renderers.ProductLineupRenderer" > <s:layout> <s:HorizontalLayout/> </s:lay

我有一个带有数据组的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>


阅读Adobe论坛()上过去的帖子:

Shongrunden演示如何从数据组对象触发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启动它们来实现这一点。因为repeater示例为每个项分配相同的处理程序功能,所以谁调用函数并不重要,只要在该级别执行


它不像以前那样是MXML内联的,需要更多的处理程序。但它确实允许在示例中使用spark组件。

您可以从气泡属性设置为true的项目渲染器中调度事件。这意味着它们将到达数据组或数据组的父级,您可以在其中添加侦听器。

我就是这样做的:

    <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>