2012-10-12 45 views
0

我有兩個類,VideoPod和RemotePod,RemotePod繼承自VideoPod。如果沒有顯示這些類的所有代碼,basicall這裏的VideoPod的一部分:爲什麼將這些對象放入MXML中打破了這個功能?

 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"> 

和這裏的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); 

其中onCreationComplete()被調用爲RemotePod creationComplete事件。幾分鐘前,我嘗試將RemotePod中的按鈕和標籤移動到實際的MXML中,但這打破了showPanel()函數。它提出的錯誤基本上有以下信息:「在本組中找不到vg」。 (VideoPod繼承自s:Group。)

我不明白。我也開始測試vg在運行時的寬度,它顯然只是停留在0.什麼是造成這種情況的晦澀語言功能?謝謝!

+2

我不認爲RemotePod可以*有* MXML,除非您已經將VideoPod作爲模板組件編寫。因此,查看兩者的代碼以查看這是否甚至可以正常工作非常重要。另外,你不應該在creationComplet中添加子元素,而是在createChildren覆蓋中。 –

回答

1

MXML類不會繼承其父母的MXML子組件。您應該在您的類構造函數(如.as)或初始化偵聽器(如.mxml)中使用純AS3創建Panel和VGroup。

protected var pnl:Panel; 
protected var vg:VGroup; 

private function onInitialize():void 
{ 
    pnl = new Panel(); 
    //set pnl properties such as width, height... 
    addComponent(pnl); 

    vg = new VGRoup(); 
    //set vg properties such as width, height... 
    addComponent(vg); 
} 

另一種解決方案是爲您的基類使用皮膚。

+0

因此,我甚至無法重寫一個函數,只需調用super即可訪問父級組件。()? – Panzercrisis

+0

如果函數被聲明爲protected或public,則可以覆蓋該函數。 – Kodiak

+0

這就是我想要做的。然而,在那裏調用super.showPanel()會引起問題。 – Panzercrisis