2009-08-28 4 views
1

ドキュメントクラス以外のクラスからライブラリアイテムにアクセスするにはどうすればよいですか?例えばAS3 - ドキュメントクラスの外からライブラリアイテムにアクセス

、私はFlashでムービークリップを作成し、名前はFooとActionScriptのためにそれをエクスポートする場合、私はドキュメントクラスでこれを行うことができます。

var f = new Foo(); 
this.addChild(f); 

そして、それはそれとして、ステージに表示されますすべきだ。しかし、私は他のクラスからこのオブジェクトの他のインスタンスを作成することができる必要があります。 SomeOtherClass.asで上記のコードを使用すると、ステージ上に何も表示されません。明らかに、このクラスはライブラリ内のFooオブジェクトについて認識していないためです。

私はたぶんappplicationDomain.getDefinitionを何とか使う必要があると知っています。これは動作しません。

var a = new ApplicationDomain(ApplicationDomain.currentDomain); 
var foo: Class = a.getDefinition ("com.me.CustomClass") ; 
var f = new foo() ; 
addChild (f) ; 

TypeError:エラー#1007:非コンストラクタでインスタンス化が試みられました。

答えて

0

私はこれが問題であることをこれまで覚えていません。 MovieClipなどから派生したコードクラスを作成し、そのプロパティのどこかでライブラリアイテムに関連付ける必要があると思います(これはしばらくありました)。もちろんこれが完了したら、他のクラスと同じようにライブラリクラスを扱うことができます。

EDIT:

はこれを試してください:あなたの問題の近くに読め

var foo:Class=loaderInstance.contentLoaderInfo.applicationDomain.getDefinition("MyClass"); 
var x:*=new foo(); 

、私はこのコードがないloadee側、ローダ側にあることを認識しています。しかし、間違いなく正しい木を吠える。

+0

はい、あなたのコードはローダーで呼び出された場合でも動作しますが、その場合はapplicationDomainを使用せずにライブラリにアクセスできます。 同じタイプの呼び出しを使用する方法を知りたいが、 "loadee"(二次的に読み込まれたswf)の中で。 –

0

は、より多くのこのような何かを試してみてください:

var foo:Class = ApplicationDomain.currentDomain.getDefinition("SymbolName") as Class; 

私はシンボル名は、ライブラリシンボルのために、先頭にパッケージ名を持つべきではないと信じています。

+0

ReferenceError:エラー#1065:変数CustomClassが定義されていません。 ロードされたセカンダリswfからライブラリにアクセスしようとしています。親swfのライブラリにアクセスする必要があります。 –

1

アプリケーションドメインの問題のようです。ロードされたSWFは、ローダーで定義されたクラスにアクセスできません。

loader swfライブラリにload swfアクセス権を与える必要があります。 LoaderContextを使用してください。私の頭の上オフ

var loader:Loader = new Loader(); 
var ctx:LoaderContext = new LoaderContext(false,ApplicationDomain.current); 
loader.load(yourRequest,ctx); 
+0

私はあなたの提案をローダーで使用すると、メインのライブラリから、子のswfでコンパイルされた他のクラスから呼び出されたオブジェクトのインスタンスをどのように作成するのでしょうか? –

+0

これを試してください: var clazz:Class = loaderInfo.applicationDomain.getDefinition( "ClassName")as Class; varインスタンス:ClassName = new clazz(); –

0

すべて私が今までどのクラスがどの標準のインポートのようにそれをインポートすることであるからライブラリ項目を使用することをやったので、私は、やや過剰調理これらの答えを見つけます。確かにそういうわけで、私たちはActionscriptのためにExportを選択します。例えば

package 
{ 
    import foo;      // Library MovieClip 
    import flash.display.MovieClip; // Must import MovieClip to Extend it. 
    ....... 

    public class something extends MovieClip 
    { 
    private var _foo:foo; // Create a local reference of the imported Library Item. 
    ...... 

    public function something():void 
    { 
    _foo = new foo(); // Create a new instance of the imported Library Item. 
    ......... 
    } 
    } 
    } 

私は、これはそれぞれ、すべての時間を働く見つけ、それが正しい道だかどうかを言うことはできません。それは私のために働く。

+0

これは同じswf内で動作しますが、外部定義されたswfのクラス定義からインスタンス化することはできません。これは、説明のコメントに基づいてポスターが尋ねているものです。 –

関連する問題