2010-06-30 55 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>