Flex:在SkinnableDataContainer的项目上添加单击处理程序

时间:2010-05-21 12:57:18

标签: flex flex4 itemrenderer

我是Flex的新手。

我在这里寻找的是在SkinnableDataContainer创建的所有项目上添加click处理程序。我尝试了几件不起作用的东西,我不知道这是什么方法。

<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组件中声明处理程序。我希望处理程序代码保持在应用程序级别。

是否有一个简单的'Flex-ish'来实现这一目标?

3 个答案:

答案 0 :(得分: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中。它们没有任何属性可以直接实现它。

答案 1 :(得分:1)

好的......我自己找到了答案:

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

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

每次将新渲染器添加到容器时都会触发rendererAdd事件,并且它具有属性renderer,它是渲染器对象本身。所以这里是在每个创建的渲染器上添加点击处理程序的地方。

答案 2 :(得分:0)

你也可以将SkinnableDataContainer子类化并处理那里的所有渲染器。然后,当触发事件处理程序时,您的自定义SkinnableDataContainer将分派更改事件或其他一些事件。接下来,在您的应用程序中,您在该特定事件上设置一个监听器,然后您去...