2010-06-30 21 views
1

从定义ItemRenderer事件处理我有一个DATAGROUP一个MXML应用程序如下:事件在DataGroup

<s:DataGroup id="productSelector" 
      dataProvider="{products}" 
      itemRenderer="renderers.ProductLineupRenderer" 
      > 
    <s:layout> 
     <s:HorizontalLayout/> 
    </s:layout> 
</s:DataGroup> 

我想知道什么时候在我的itemRenderer项目被操纵。我有itemRenderer类派遣自定义事件。

什么我以前做的是使用MX:转发:

<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框架得到的好东西。

回答

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中触发它们。由于repeater示例为每个项目分配相同的处理函数,因此只要在该级别执行函数,谁调用函数就没有关系。

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

0

您可以从具有bubble属性设置为true的项目渲染器派发事件。这意味着它们将到达数据组或可以添加侦听器的数据组的父级。

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>