2014-06-14 28 views
0

我相信這是一個容易的。我有一個Main.as類調用另一個加載StageWebView的類。如果自行調用StageWebView工作正常,但是當我從另一個類調用它時,它將不會顯示。我忘了什麼簡單的事情?as3 StageWebView中不顯示類

也許它與加載類中的「舞臺」有關?

Main.as

public function addPopeNews() 
    { 
    thePopeNews = new popeNews(); 
    addChild(thePopeNews);  
    } 

PopeNews.as

package com 
{ 

    import flash.display.MovieClip; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.*; 
    import flash.net.URLRequest; 
    import flash.media.StageWebView; 
    import flash.geom.Rectangle; 

    public class popeNews extends MovieClip 
    { 


     public var backBar:popeNewsBar; 
     public var webView:StageWebView; 

     public function popeNews() 
     { 

     webView=new StageWebView(); 
     webView.stage = this.stage; 



     webView.loadURL("www.myUrl.com"); 
     trace("POPE NEWS!!!"); /// trace works! 


     backBar = new popeNewsBar(); 
     backBar.width = Main._screenX; 
     backBar.scaleY = backBar.scaleX; 

     webView.addEventListener(Event.COMPLETE, webLoaded); 
      webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onChanging); 


     } 

     public function webLoaded(e:Event) 
     { 
      trace("web loaded"); // trace works!! 

      if (webView.isHistoryBackEnabled) 
      { 
      addChild(backBar); 
      backBar.bb.addEventListener(MouseEvent.CLICK, goBack); 
      webView.viewPort = new Rectangle(0,backBar.height,Main._screenX,Main._screenY - backBar.height); 
      } 
      else 
      { 
       webView.viewPort = new Rectangle(0,0,Main._screenX,Main._screenY); 
      } 
     } 

     public function goBack(e:Event) 
     { 
      if (webView.isHistoryBackEnabled) 
      { 
       trace("Called GO BACK"); 
       webView.historyBack(); 
       removeChild(backBar); 
       backBar.bb.removeEventListener(MouseEvent.CLICK, goBack); 
       return; 
      } 

      if (webView.isHistoryForwardEnabled) 
      { 
       webView.historyForward(); 
       return; 
      } 
     } 

     public function onError(e:ErrorEvent):void 
     { 
      //infoBox.text="Page is not available. Try reloading."; 
     } 

     public function onChanging(e:LocationChangeEvent):void 
     { 

      //webView.viewPort = null; 
      trace("Called CHANGING!!!"); 

     } 

     /// 
    } 
} 

回答

1

你是對的,舞臺是在PopeNews構造null。你應該把你的初始化代碼放到一個新的方法中,並且監聽ADDED_TO_STAGE事件。

public function popeNews() 
{ 
    addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
} 

private function addedToStageHandler(ev:Event):void 
{ 

    webView=new StageWebView(); 
    webView.stage = this.stage; 

    webView.loadURL("www.myUrl.com"); 
    trace("POPE NEWS!!!"); /// trace works! 

    backBar = new popeNewsBar(); 
    backBar.width = Main._screenX; 
    backBar.scaleY = backBar.scaleX; 

    webView.addEventListener(Event.COMPLETE, webLoaded); 
    webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onChanging); 
} 

另外,按照慣例,類名是大寫的。

+0

謝謝肖恩!我一直想知道命名約定。任何建議在一個小指南?謝謝 –

+0

我認爲*類型指定名稱*和*參數名稱*之間的部分在這裏很好:http://sourceforge.net/adobe/flexsdk/wiki/Coding%20Conventions/ –