获取列表用户的哪个条目单击

时间:2013-01-18 19:27:12

标签: actionscript-3 flex list events

我在Air / Flex中制作简单的程序,其中图像的图层列在“list”Flex组件中。想法是用户可以通过拖动,单击,双击等列表中的条目来编辑图层。

然而,看起来我仍然没有完全掌握事件绑定在AS3和Flex组件中的工作原理。当我双击它时,我试图让程序跟踪列表中一个条目的标签。它适用于三个中的一个条目,但其他条目返回参考错误#1069。以下是我的图层类中的相关代码:

声明图层面板和列表:

<s:Panel x="10" y="29" width="276" height="261" id="newlevel" title="Background layers">
        <s:List  id="layers" x="10" y="41" width="254" height="143" dragEnabled="true" dragMoveEnabled="true" dataProvider="{layerlist}"
                dropEnabled="true" dragComplete="layers_dragCompleteHandler(event)" doubleClickEnabled="true" doubleClick="layers_doubleClickHandler(event)" keyDown="layers_keyDownHandler(event)">

        </s:List>

        <s:Button x = "94" y = "192" width="86" height="26" label="OK" click="ok_clickHandler(event)" />
        <s:Label x="10" y="10" width="254" height="33" text="Click and drag to reorder, rename and delete layers"/>
    </s:Panel>

定义“layerlist”的脚本并添加一些测试值:

//list of layers in scene. Used in layer list for re-ordering and editing.
            public var layerlist:ArrayCollection = new ArrayCollection(
                [{label: "asd", price: "dsfdf"}]);

-

layerlist.addItem({label: "canoe", price: "dsfdf"});
        layerlist.addItem({label: "coyote", price: "dsfdf"});

最后我的双击事件处理程序:

protected function layers_doubleClickHandler(event:MouseEvent):void
        {
            // user doubleclicked so rename this layer
            trace("doubleclick");
            trace(event.target.label);

        }

当用户点击列表中的一个条目时,我需要知道它来自“layerlist”的条目。我认为event.target会指向正确的项目,但显然它并不那么容易。在我使用按钮制作工具栏并使用event.label查找按钮用户按下之前,但在这种情况下它不起作用。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

事件处理程序中的目标始终是从鼠标启动单击的子项。它可以是Label,renderer,列表容器中的任何子项,取决于点击点。 你可以做一些解决方法,例如,analize event.target:

protected function layers_doubleClickHandler(event:Event):void
{
    var item:IItemRenderer;
    if (event.target is IItemRenderer)
        item = event.target as IItemRenderer;
    else if (event.target is Label)
        item = event.target.parent;

    trace(item.label);
}

另一种方法是你可以覆盖itemRenderer类的列表并从那里听双击。

了解event bubling in flash,这有助于理解图片。