我正在 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>
定义“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 来找出用户按下的按钮之前,但在这种情况下它不起作用。
我该怎么办?