1

Flexは初めてです。

ここで探しているのはclick、SkinnableDataContainerによって作成されたすべてのアイテムにハンドラーを追加することです。うまくいかなかったいくつかのことを試しましたが、それを行う正しい方法がわかりません。

<s:SkinnableDataContainer id="teamList"
                          itemRenderer="TeamSummaryRenderer">
    <s:dataProvider>
        <s:ArrayList>
            <fx:Object teamName="A super team 1"/>
            <fx:Object teamName="A super team 2"/>
            <fx:Object teamName="A super team 3"/>
        </s:ArrayList>
    </s:dataProvider>
</s:SkinnableDataContainer>

TeamSummaryRendererさらに、カスタムコンポーネントでハンドラーを宣言したくありません。ハンドラーコードはアプリケーションレベルのままにしておくことをお勧めします。

これを達成するための単純な「フレックスっぽい」はありますか?

4

3 に答える 3

2

いいえ。

<s:SkinnableDataContainer
    Properties
    autoLayout="true"
    clipAndEnableScrolling="false"
    dataProvider="null"
    horizontalScrollPosition="null"
    itemRenderer="null"
    itemRendererFunction="null"
    layout="VerticalLayout"
    typicalItem="null"
    verticalScrollPosition="null"

    Events
    rendererAdd="No default"
    rendererRemove="No default"
  />

http://opensource.adobe.com/wiki/display/flexsdk/Spark+SkinnableDataContainer

ドキュメントにあるように、ハンドラーを itemRenderer に保持する必要があると思います。それを直接達成するためのプロパティはありません。

于 2010-05-21T15:07:12.437 に答える
1

わかりました...私は自分で答えを見つけました:

<s:SkinnableDataContainer
rendererAdd="my_handler(event)"/>

private function my_handler(event:RendererExistenceEvent):void{
    event.renderer.addEventListener(flash.events.MouseEvent.CLICK, clickhandler);
}

このrendererAddイベントは、新しいレンダラーがコンテナーに追加されるたびにトリガーされrenderer、レンダラーオブジェクト自体であるプロパティがあります。したがって、ここに、作成されるすべてのレンダラーにクリックハンドラーを追加する場所があります。

于 2010-05-24T07:56:20.620 に答える
0

また、SkinnableDataContainer をサブクラス化し、そこですべてのレンダラー リスニングを処理することもできます。次に、イベントハンドラーがトリガーされると、カスタム SkinnableDataContainer が変更イベントまたはその他のイベントを送出します。次に、アプリケーションで、その特定のイベントにリスナーを設定します。

于 2010-12-10T18:50:33.060 に答える