2012-09-05 47 views
3

我必須在這裏丟失一些簡單的東西,但在我的主應用程序中,我導入了我的Pages類,該類繼而導入並動態實例化兩種頁面類型之一。 Unfortunatley它只會導致錯誤:ReferenceError:錯誤#1065:變量PageA未定義。(當調用Pages.load( 「A」);AS3錯誤#1065

頁數

package pages 
{ 
    import pages.PageA; 
    import pages.PageB; 
    import flash.display.Sprite; 
    import flash.utils.getDefinitionByName; 

    public class Pages 
    { 
     public static function load(pageType:String):void 
     { 
      var pageClass:Class = getDefinitionByName("pages.Page"+pageType) as Class; 
     } 
    } 
} 

網頁A

package pages 
{ 
    import flash.display.Sprite; 

    public class PageA extends Sprite 
    { 
     public function PageA() 
     { 
      trace("PageA init"); 
     } 
    } 
} 

網頁B

package pages 
{ 
    import flash.display.Sprite; 

    public class PageB extends Sprite 
    { 
     public function PageB() 
     { 
      trace("PageB init"); 
     } 
    } 
} 
+1

看起來你應該對發佈的代碼有問題。你確定這是你的全部嗎? –

+0

你的加載函數似乎相當無用,因爲它不會返回任何東西,也不會存儲任何超出函數範圍的東西。 – BadFeelingAboutThis

+1

我已將代碼裁剪到重現錯誤所需的最小值。我確定的是,因爲這些類不是在代碼中聲明的,所以編譯器不包含它們,所以當應用程序本身去加載它們時,它們是無處可尋的。 –

回答

4

確切地說,編譯器明顯沒有在編譯的SWF中包含這些類。當我嘗試通過生成的字符串(在我的例子中是'Gem'+一個整數)進行實例化並收到有關相同的錯誤時,我在此之前就打過這面牆。我通過創建一個虛擬常量來繞過它,列舉了所有我打算使用的類,這讓編譯器意識到了這一點。所以,請進行以下操作:

private static const PAGES:Array=[PageA, PageB]; 

並編譯。應該做。另外,由於您的「Pages」類屬於同一個包,因此您不需要導入部分「pages」包,它們已經在項目中可見。

+0

天才!完美的解決方案,非常感謝現在我已經有了這個討厭的問題,我可以繼續在FlashDevelop中進行開發! –