2014-06-14 30 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/ –