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クラスからのイベントを現在のビュー集約コンポーネントに簡単に割り当てることができます。(highlightProductunhighlightProductselectProduct

DataGroupまたはListコンポーネント内でこれを行う方法がわかりません。ただし、Sparkフレームワークで得られるDataGroupsレイアウトやその他の優れた機能を使用したいと思います。

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

アドビフォーラム( 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

バブルプロパティがtrueに設定されているアイテムレンダラーからイベントをディスパッチできます。これは、リスナーを追加できるデータグループまたはデータグループの親に到達することを意味します。

于 2010-08-12T14:19:37.310 に答える