Flex中的editedItemPosition

最近想实现一个list双击编辑其项目的效果。查了一下帮助文档。看到一个createItemEditor() createItemEditor():
使用由 itemEditor 属性指定的编辑器在 editedItemPosition 为项目渲染器创建项目编辑器。
此方法将编辑器实例设置为 itemEditorInstance 属性。
您只能从 itemEditBegin 事件的事件侦听器中调用此方法。若要在其它时间创建编辑器,请设置 editedItemPosition 属性以生成 itemEditBegin 事件。

在ListEvent.ITEM_DOUBLE_CLICK监听函数中试了几次,没有实现效果,注意到上面有句话“若要在其它时间创建编辑器,请设置 editedItemPosition 属性以生成 itemEditBegin 事件。”于是将注意力转移到editedItemPosition上。

帮助文档中是这么解释editedItemPosition属性的:

正在编辑的数据提供程序项目的项目渲染器的列索引和行索引(如果有)。
此 Object 包含 columnIndex 和 rowIndex 这两个字段,分别是项目的从零开始的列索引和项目索引。对于 List 控件,columnIndex 属性始终为 0;例如:{columnIndex:0, rowIndex:3}。
设置此属性会将项目滚动到视图中,并会调度 itemEditBegin 事件以打开指定项目上的项目编辑器。
此属性可用作数据绑定的源。

所以就在DOUBLE_CLICK中指定了该属性。并在这之前打开了list的editable属性,在编辑完之后(ListEvent.ITEM_EDIT_END)将editable设回为false 。这样就实现了双击编辑list的效果。

具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:List id="list" x="146" y="90" width="225" height="250" labelField="name" doubleClickEnabled="true">
  <mx:dataProvider>
   <mx:Array>
    <mx:Object name="tian" />
    <mx:Object name="zhang" />
    <mx:Object name="diao" />
    <mx:Object name="zeng" />
   </mx:Array>
  </mx:dataProvider>
</mx:List>
<mx:Script>
  <![CDATA[
   import mx.events.ListEvent;
   private function init():void     list.addEventListener(ListEvent.ITEM_DOUBLE_CLICK , onDoubleClick ) ;
    list.addEventListener(ListEvent.ITEM_EDIT_END , onEnd ) ;   
   private function onDoubleClick(event:ListEvent):void     list.editable = true ;
    var editedPosition:Object = new Object() ;
    editedPosition.columnIndex = event.columnIndex ;
    editedPosition.rowIndex = event.rowIndex ;
    list.editedItemPosition = editedPosition ;   
   private function onEnd(event:ListEvent):void     list.editable = false ;   ]]>
</mx:Script>
</mx:WindowedApplication>

你可能感兴趣的:(xml,Flex)