2012-05-15 42 views

回答

0

一個解決方案是創建一個包含標籤和菜單外觀部件的自定義組件。通過這種方式,您還可以以任何您想要的方式對組件進行蒙皮處理,並以非常簡單的方式訪問標籤以及菜單。

爲了解決您的問題,我們假設皮膚部件被命名爲'標籤'和'菜單'。在調度ContextMenuEvent時,可以通過訪問菜單點擊處理程序中的event.target屬性來訪問點擊菜單。現在,它的父項將通過其父項屬性可用,這是您如何訪問標籤組件或皮膚部件的方式。因此,這將是這樣的:

event.target.parent.label

其中:

event.target - 菜單組件

event.target。父母 - 您的組件圍繞標籤和菜單環繞

event.target.parent.label - 您想要訪問的組件

總結一下,創建一個自定義組件,它包裝一個標籤和一個菜單,並將其作爲其皮膚部件。這樣,通過識別兩個部分中的任何一個(例如在事件處理程序中),您可以通過父級屬性輕鬆確定其他相應的組件。

您可能需要將event.target值轉換成菜單類,而event.target.parent屬性,您的自定義組件類,則標籤將可用。

0

如果您正在使用標籤作爲組分比你可以訪問它:

event.contextMenuOwner.text 

如果您使用的按鍵比你可以訪問它:

event.contextMenuOwner.label 

希望這可能有所幫助。

0

當我點擊任何菜單項時,它的mouseTarget屬性將包含iformation緊靠它的父項。

// Handler when customized menu items are selected.  
private function menuItemHandler(event:ContextMenuEvent):void { 
     var obj:InteractiveObject = event.mouseTarget; 
     if(obj is Label) 
      Alert.show(Label(obj).id); 
} 

檢查是否有幫助。

小應用程序。

<?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" minWidth="955" minHeight="600" 
       creationComplete="init()"> 

    <s:layout> 
     <s:BasicLayout/> 
    </s:layout> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 

      [Bindable] 
      private var cm:ContextMenu; 
      private var cmi:ContextMenuItem; 

      private var item1:ContextMenuItem; 
      private var item2:ContextMenuItem; 
      private var item3:ContextMenuItem; 
      private var item4:ContextMenuItem; 
      private var item5:ContextMenuItem; 

      private function init():void 
      { 
       cmi = new ContextMenuItem("Some Context Item"); 
       cmi.enabled = false; 

       item1 = new ContextMenuItem("Customized item", true); 
       item2 = new ContextMenuItem("Enable/Disable customized menu entry", true); 
       item3 = new ContextMenuItem("Visible/Invisible customized menu entry"); 
       item4 = new ContextMenuItem("Copy\u00A0"); 
       item5 = new ContextMenuItem("More Flex tutorials", true); 

       // Manage clicks on your customized items 
       item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); 
       item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); 
       item3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); 
       item4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); 
       item5.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); 

       cm = new ContextMenu(); 
       cm.hideBuiltInItems(); 
       cm.customItems = [cmi, item1, item2, item3, item4, item5]; 
       cm.addEventListener(ContextMenuEvent.MENU_SELECT, onMnuSelect); 
      } 

      private function onMnuSelect(event:ContextMenuEvent):void 
      { 
       /* var obj:InteractiveObject = event.mouseTarget; 
       if(obj is Label) 
        Alert.show(Label(obj).id); */ 
      } 

      // Handler when customized menu items are selected.  
      private function menuItemHandler(event:ContextMenuEvent):void { 
       var obj:InteractiveObject = event.mouseTarget; 
       if(obj is Label) 
        Alert.show(Label(obj).id); 
      } 
     ]]> 
    </fx:Script> 

    <s:VGroup> 
     <s:Label id="label1" text="label1" contextMenu="{cm}"/> 
     <s:Label id="label2" text="label2" contextMenu="{cm}"/> 
     <s:Label id="label3" text="label3" contextMenu="{cm}"/> 
     <s:Label id="label4" text="label4" contextMenu="{cm}"/> 
    </s:VGroup> 


</s:Application> 
相關問題