从DataGroup中的自定义ItemRenderer事件处理事件

时间:2010-06-30 20:40:26

标签: events flex4 mxml itemrenderer

我有一个带有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框架获得的其他很棒的东西。

3 个答案:

答案 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的项呈示器中调度事件。这意味着它们将到达数据组,或者您可以添加侦听器的数据组的父级。