3

ここでは単純なものが欠けているに違いありませんが、メインアプリでは、Pagesクラスをインポートします。これにより、2つのページタイプのいずれかがインポートされ、動的にインスタンス化されます。残念ながら、エラーが発生するだけです。ReferenceError:エラー#1065:変数PageAが定義されていません。( Pages.load( "A");を呼び出すと)

ページ

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;
        }
    }
}

PageA

package pages 
{
    import flash.display.Sprite;

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

PageB

package pages 
{
    import flash.display.Sprite;

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

1 に答える 1

4

正確には、コンパイラーはコンパイルされたSWFにそれらのクラスを明らかに含めませんでした。生成された文字列(私の場合は「Gem」+整数)を介してインスタンス化しようとしたときに、以前どこかでこの壁にぶつかり、ほぼ同じエラーを受け取りました。ダミー定数を作成し、使用する予定のすべてのクラスを列挙することで回避しました。これにより、コンパイラーはこれを認識しました。したがって、次のようにします。

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

そしてコンパイルします。する必要があります。また、「pages」クラスは同じパッケージに属しているため、「pages」パッケージの一部をインポートする必要はありません。これらはプロジェクトにすでに表示されています。

于 2012-09-05T03:56:01.343 に答える