Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 获取用户单击的列表的哪个条目_Actionscript 3_Apache Flex_List_Events - Fatal编程技术网

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

Actionscript 3 获取用户单击的列表的哪个条目,actionscript-3,apache-flex,list,events,Actionscript 3,Apache Flex,List,Events,我正在用Air/Flex制作一个简单的程序,其中图像的各个层都列在“列表”Flex组件中。用户可以通过拖动、单击、双击列表中的条目来编辑图层 然而,看起来我仍然没有完全掌握事件绑定在AS3和Flex组件中是如何工作的。当我双击列表时,我试图让程序跟踪列表中一个条目的标签。它适用于三分之一的条目,但其他条目返回引用错误#1069。下面是我的图层类中的相关代码: 声明图层面板和列表: <s:Panel x="10" y="29" width="276" height="261" id="new

我正在用Air/Flex制作一个简单的程序,其中图像的各个层都列在“列表”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>
--

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

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

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


我该怎么办?

事件处理程序中的目标始终是从鼠标开始单击的子对象。它可以是标签、渲染器、列表容器中的任何子级,具体取决于单击点。 您可以执行一些变通方法,例如,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类,然后从那个里双击


读一读,这将有助于理解图片

目标不引用列表而不是渲染器吗?为什么不看看“layers.selectedItem”或“layerlist[layers.selectedIndex]”呢?谢谢,这也行。我不知道selecteditem。谢谢,这解释了很多,我设法让它工作了。另外,谢谢你的链接。
protected function layers_doubleClickHandler(event:MouseEvent):void
        {
            // user doubleclicked so rename this layer
            trace("doubleclick");
            trace(event.target.label);

        }
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);
}