2010-02-02 6 views
2
for(var l:int=0; l<anXML.length(); l++){ 

      aButton=new btn_secondTier(); 
      aLocation.addChild(aButton); 
      //var aButtonDefaults:ButtonDefaults=new ButtonDefaults(aButton);    
      aButton.y=l*24; 
      aButton.name=anXML[l].attribute("id"); 
      aButton.title_txt.text=anXML[l].theTitle; 
      aButton.addEventListener(MouseEvent.ROLL_OVER,onDropOver); 
      aButton.addEventListener(MouseEvent.ROLL_OUT,onDropOut); 
      aButton.addEventListener(MouseEvent.CLICK,onClick); 
      aButton.mouseChildren=true; 

for(var k:int=0; k< anXML[l].thirdMenu.length(); k++){     

       bButton=new btn_thirdTier(); 
       aButton.thirdContainer_mc.addChild(bButton); 

       bButton.addEventListener(MouseEvent.ROLL_OVER,onMouseOver); 
       bButton.addEventListener(MouseEvent.ROLL_OUT,onMouseOut); 

       bButton.buttonMode = true; 
       bButton.useHandCursor = true;  

       bButton.y=k*24; 
       bButton.name=anXML[l].thirdMenu[k].attribute("id"); 

       //bButton.addEventListener(MouseEvent.CLICK,onClick); 

       aButton.thirdContainer_mc.visible=false; 

       bButton.title_txt.text=anXML[l].thirdMenu[k].theTitle; 
       bButton.mouseChildren=false; 


      } 
      // PREVENTS THE THIRD NAV FROM THE PRESENTATION BUTTON FROM OVERLAPPING THE EDGE OF THE SCREEN 
      if(aLocation==main.mainNav_mc.btn_2.secondaryContainer_mc){ 
       aButton.thirdContainer_mc.x=201; 
      } 

      // FRAME AROUND TERTIARY BUTTONS 
      aButton.thirdContainer_mc.thirdNavBG_mc.height=(aButton.thirdContainer_mc.height); 
      var thirdBGHeight:Number=(aButton.thirdContainer_mc.thirdNavBG_mc.height)+2; 
      aButton.thirdContainer_mc.thirdNavBG_mc.height=thirdBGHeight; 
      aButton.thirdContainer_mc.thirdNavBG_mc.width=202; 
      aButton.thirdContainer_mc.thirdNavBG_mc.x=-1; 
      aButton.thirdContainer_mc.thirdNavBG_mc.y=-1; 

     } 

En cours de construction d'un système de menu dynamique, avec 3 niveaux de navigation. Actuellement, lorsque les enfants de la souris est défini sur "true", il ne veut pas se souvenir du nom de l'élément de menu créé.as3 mouseChildren = true ne contient pas le nom du bouton créé

il crache, 'instance263' ou quel que soit le numéro lorsque je trace avec mon événement onClick.

Avec mouseChildren défini sur 'false', mon troisième niveau de navigation cesse de fonctionner.

Le but ici est de faire en sorte que les éléments de menu conservent un nom d'occurrence afin que je puisse y revenir et définir des états actifs pour le module actif actuel.

MISE À JOUR:

Voici où le problème se pose

private function onClick(e:MouseEvent):void{ 
      var myString=e.target.name; 
      var aList:Array = myString.split("_"); 
      trace(myString+" gfgfgfg "+argh[0].name); 

      main.video_controller.nsStream.pause(); 
      main.video_controller.nsStream.close(); 
      main.btn_continue.visible=true;    
      main.btn_previous.visible=true; 

      if(e.target.name==xmlData.menu[aList[0]].secondMenu[aList[1]].thirdMenu[aList[2]].attribute("id")){ 

      main.removeActivity(); 
      loadToolBox(xmlData.menu[aList[0]].secondMenu[aList[1]].thirdMenu[aList[2]]);     
      main.loadModule(xmlData.menu[aList[0]].secondMenu[aList[1]].thirdMenu[aList[2]]); 
      menu1ID=aList[0]; 
      menu2ID=aList[1]; 
      menu3ID=aList[2]; 

/////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// //////////////////// } }

Ceci est la trace qui me pose des problèmes.

trace(myString+" gfgfgfg "+argh[0].name); 

myString est suivi (instance263) ou autre chose. Alors comment se fait-il que e.target ne me trace pas mon nom d'installation?

+0

Avez-vous essayé de tracer anXML [l] .thirdMenu [k] .attribute ("id") lorsque le bButton est en cours d'initialisation? –

+0

Pourriez-vous créer un exemple de cas minimal? – Killroy

+0

@Richard Inglis Je l'ai tracé, et il semble que j'obtiens le nom d'instance du 2ème niveau du menu. Cependant, lorsque je clique sur un élément du deuxième niveau, il me reste 'instance263' ou quel que soit le nombre. – DesignedByDave

Répondre

1

Dans un événement MouseEvent, rappelez-vous que la propriété target fait référence à l'objet d'affichage initialement envoyé l'événement. Si votre bouton contient des graphiques et autres joyeusetés, target fait probablement référence à l'un des objets d'affichage enfant du bouton - le plus bas niveau ayant effectivement été cliqué. Vous souhaitez probablement utiliser e.currentTarget à la place. Cela pointe vers l'objet qui reçoit actuellement l'événement lorsqu'il parcourt la liste d'affichage, qui sera l'objet du bouton dans lequel vous avez placé l'écouteur.

Si vous ne savez pas exactement comment fonctionne le bouillonnement, cela n'aura pas beaucoup de sens. Essayez this article, par exemple.