1

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

4

3 回答 3

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>
于 2010-11-01T15:20:28.327 回答
1

阅读过去发布到 Adob​​e 论坛 ( 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 内联,需要更多的处理程序。但它确实允许在示例中使用火花组件。

于 2010-06-30T21:19:11.763 回答
0

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

于 2010-08-12T14:19:37.310 回答