代码之家  ›  专栏  ›  技术社区  ›  sebpiq

flex:在SkinableDataContainer的项上添加单击处理程序

  •  1
  • sebpiq  · 技术社区  · 16 年前

    我刚开始灵活应变。

    我在这里要找的是添加一个 click 由SkinableDataContainer创建的所有项的处理程序。我尝试了一些不起作用的方法,但我不知道什么是正确的方法。

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

    是否有一个简单的“灵活”来实现这一点?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Thalaivar    16 年前

    不。

    <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

    我认为您必须像文档所说的那样将处理程序保存在项呈现器中。他们没有任何直接实现它的属性。

        2
  •  1
  •   sebpiq    16 年前

    好啊。。。我自己找到了答案:

    <s:SkinnableDataContainer
    rendererAdd="my_handler(event)"/>
    
    private function my_handler(event:RendererExistenceEvent):void{
        event.renderer.addEventListener(flash.events.MouseEvent.CLICK, clickhandler);
    }
    

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

        3
  •  0
  •   Marsel    15 年前

    您还可以对skinnabledatacontainer进行子类化,并处理监听的所有渲染器。然后,当事件处理程序被触发时,您的自定义SkinableDataContainer将发送一个更改事件或其他事件。接下来,在您的应用程序中,您为那个特定事件设置了一个监听器,然后就开始了……

    推荐文章