2010-07-07 3 views
1

У меня есть DataGrid с пользовательским itemRenderer (Canvas), который имеет контекстное меню по правому клику. Я пытаюсь получить данные itemRenderer.ссылка flex contextmenu ссылка на компонент

Я попытался найти что-то в случае & переменных. Я также попытался с помощью FlexNativeMenu на RIGHT_MOUSE_CLICK. Но я не нашел выхода.

Пожалуйста, помогите мне в получении данных itemrenderer или его экземпляра.

ответ

1

contextMenuOwner Недвижимость ContextMenuEvent, отправленное ContextMenu, будет указывать на интересующий нас 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> 
Смежные вопросы