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

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

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 回答