2010-07-07 43 views
1

我有一個DataGrid與一個自定義的itemRenderer(畫布),其右鍵單擊上下文菜單。我正在嘗試獲取itemRenderer的數據。flex contextmenu組件參考

我試圖找到事件&變量。我也嘗試在RIGHT_MOUSE_CLICK上使用FlexNativeMenu。但我沒有找到任何出路。

請幫助我獲取itemrenderer或其實例的數據。

回答

1

contextMenuOwnerContextMenu發送的ContextMenuEvent的財產將指向感興趣的itemRenderer

var renderer:Canvas = Canvas(event.contextMenuOwner); 
trace(renderer.data); 
trace(renderer.data.something); 
1

使用ContextMenuEvent.mouseTarget

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init();"> 

    <fx:Script> 
    <![CDATA[ 
     import mx.core.IDataRenderer; 

     private function init():void 
     { 
      var dataGridContextMenu:ContextMenu = new ContextMenu(); 
      dataGridContextMenu.hideBuiltInItems(); 
      dataGridContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, 
       menuSelectHandler); 
      dataGrid.contextMenu = dataGridContextMenu; 
     } 

     private function menuSelectHandler(event:ContextMenuEvent):void 
     { 
      var displayObject:DisplayObject = event.mouseTarget as DisplayObject; 
      while (!(displayObject is IDataRenderer) && !(displayObject == dataGrid)) 
      { 
       displayObject = displayObject.parent; 
      } 
      var data:Object; 
      if (displayObject is IDataRenderer) 
       data = IDataRenderer(displayObject).data; 

      var customItems:Array = []; 
      if (data) 
      { 
       var contextMenuItem:ContextMenuItem = new ContextMenuItem(data.name, false, false); 
       customItems.push(contextMenuItem); 
      } 

      var menu:ContextMenu = ContextMenu(event.target); 
      menu.customItems = customItems; 
     } 

    ]]> 
    </fx:Script> 

    <mx:DataGrid id="dataGrid"> 
     <mx:dataProvider> 
      <s:ArrayCollection> 
       <fx:Object name="Mike" age="21"/> 
       <fx:Object name="Juss" age="19"/> 
      </s:ArrayCollection> 
     </mx:dataProvider> 
    </mx:DataGrid> 

</s:Application>