2012-10-12 2 views
0

J'ai deux classes, VideoPod et RemotePod, RemotePod héritant de VideoPod. Sans montrer tout le code dans ces classes, basicall ici fait partie de VideoPod:Pourquoi mettre ces objets dans le MXML brise cette fonction?

 public function showPanel():void { 
      if (!pnl.visible) { 
       pnl.visible = true; 
       pnl.addElement(removeElement(vg)); 
      } 
     } 
       . 
       . 
       . 
<s:Panel id="pnl" width="100%" height="100%" fontWeight="normal" visible="false" /> 
<s:VGroup id="vg" left="0" resize="onResize()" right="0" top="0" bottom="0"> 

et est ici une partie de RemotePod:

 private function onCreationComplete():void { 
      m_tmrHeartbeat.addEventListener(TimerEvent.TIMER, checkPulse); 

      var arrBtns:Array = new Array(4); 
      for (var i:int = 0; i < arrBtns.length; i++) { 
       arrBtns[i] = new Button(); 
       arrBtns[i].width = 28; 
       arrBtns[i].height = 25; 
       arrBtns[i].top = 10;//-28; 
      } 

      arrBtns[0].right = 10; 
      arrBtns[0].setStyle("icon", Images.PATH + "view-fullscreen-3.png"); 
      arrBtns[0].addEventListener(MouseEvent.CLICK, maximize); 
       . 
       . 
       . 
      for each (var btn:Button in arrBtns) { 
       addElement(btn); 
      } 

      m_lblSize.right = 154; 
      m_lblSize.top = 18;//-20; 
      m_lblSize.text = FULLSCREEN; 
      addElement(m_lblSize); 

où est appelé onCreationComplete() pour l'événement creationComplete dans RemotePod. Il y a quelques minutes, j'ai essayé de déplacer les boutons et l'étiquette dans RemotePod dans le MXML réel, mais cela a cassé la fonction showPanel(). L'erreur qu'il soulevait avait essentiellement le message suivant: "vg n'est pas trouvé dans ce groupe". (VideoPod hérite de s: Group.)

Je ne comprends pas. J'ai également commencé à tester pour voir quelle était la largeur de vg au moment de l'exécution, et il est apparemment resté à 0. Quelle est la caractéristique de langage obscure qui cause cela? Merci!

+2

Je ne pense pas que RemotePod peut * avoir * MXML sauf si vous avez écrit VideoPod en tant que composant de modèle. Donc, il serait important de regarder le code pour les deux pour voir si cela fonctionnerait même. De plus, vous ne devriez pas ajouter d'enfants dans creationComplet, mais dans un override createChildren. –

Répondre

1

Les classes MXML n'héritent pas des sous-composants MXML de leurs parents. Vous devez créer le Panel et le VGroup avec AS3 pur dans votre constructeur de classe (si .as) ou dans un écouteur initialize (si .mxml). Une autre solution consisterait à utiliser une peau pour votre classe de base.

+0

Et donc je ne peux même pas remplacer une fonction et simplement accéder aux composants du parent en appelant super. ()? – Panzercrisis

+0

Vous pouvez remplacer une fonction si elle a été déclarée protégée ou publique. – Kodiak

+0

C'est ce que j'ai essayé de faire. Appeler super.showPanel() à l'intérieur de là a causé des problèmes cependant. – Panzercrisis

Questions connexes