我是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'来实现这一目标?
答案 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将分派更改事件或其他一些事件。接下来,在您的应用程序中,您在该特定事件上设置一个监听器,然后您去...