フォーラム一覧 - トピック一覧 ActionScript 3.0
flash.utils.getDefinitionByNameについて | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | トピック |
|---|---|
| hiroaki | 投稿日時: 2007-9-24 18:48 |
やや 常連さん ![]() ![]() 登録日: 2007-3-22 居住地: 東京都港区 投稿: 28 |
flash.utils.getDefinitionByNameについて 皆様.お世話になります.
flash.utils.getDefinisionByNameの動作(仕様)についてお尋ねしたいと思います. まず,Flexプロジェクトを作成し,下記のクラスを作成します. そして,メインのmxmlにて,下記スクリプトを実行するとうまく動作します. 次に,Flexライブラリプロジェクトを作成し,mx.core.Applicationを継承した独自アプリケーションタグ(MyApplication)を定義します. MyApplicationは,FlexEvent.CREATION_COMPLETEイベントを受け取ると,このライブラリプロジェクトを使用して作成するFlexプロジェクトの あるオブジェクトをnewするとします.ここでは説明を簡単にするため,常にtest.main.Helloクラスをnewすると仮定します. 具体的には次のように記述します. そして,このライブラリプロジェクトをLibrary Pathに加え,test.main.Hello.asというクラスを作成し,次のmxmlを 実行します. すると,"var clazz:Class = flash.utils.getDefinitionByName("test.main.Hello") as Class;"の部分で 「ReferenceError: Error #1065: 変数 Hello は定義されていません。」 というエラーが出ます. そこで,今度はcreationCompleteイベントで実行されるinit関数にHelloクラスの変数を定義します(newはしません) すると,今度はエラーは起きません. そこで,質問なのですが,この現象から考えると,ライブラリプロジェクトをLibProj,それを使用するプロジェクトを UseProjとした場合,LibProjの中でUseProjに定義されたクラスをgetDefinitionByNameでインスタンス化するときには, UseProjの中で必ず変数定義をしておかなければならないのでしょうか? やりたいことは,オブジェクトの生成後に名前ベースのルールを作って,動的にオブジェクトを生成するライブラリを 作成したいと思っています.上記のように変数を定義すればできるのですが,極力避けたいと思っています. なんとなく,定義しておかなければ参照が取得できないのでダメなような気もするのですが..Javaであれば バイトコードがあれば強引にファイル読み込みでできるんですけどね.. ご助言よろしくお願いします. |
| Pepe | 投稿日時: 2007-9-26 17:56 |
モデレータ ![]() ![]() 登録日: 2006-1-10 居住地: 千葉県市川市南部(浦安との境) 投稿: 1206 |
Re: flash.utils.getDefinitionByNameについて 「getDefinitionByName」はクラス情報がコンパイルされた
SWFに存在しないとエラーになります。 また、Flex2ではコンパイルの最適化機能があり 使用されていないクラスはSWF内に取り込まれましぇん (^o^)丿 従って、 ・ダミー変数を使用してクラス情報をSWFに書き込む ・コンパイルオプション「-includes」を使用して 指定したクラス情報をSWFに書き込む ・コンパイルオプション「-include-libraries」を 使用してSWCライブラリ内のすべてのクラス情報を SWFに書き込む のどれかの方法を適用する必要があります ^_^; ちなみに「Module」という仕組みもあります (^o^)丿
|
| hiroaki | 投稿日時: 2007-9-27 9:36 |
やや 常連さん ![]() ![]() 登録日: 2007-3-22 居住地: 東京都港区 投稿: 28 |
Re: flash.utils.getDefinitionByNameについて >Pepeさん
ご回答ありがとうございます. 引用:
やはりそうでしたか.論理的に考えても,ライブラリがコンパイルされた時点で知りえなかったクラスをロードすることはできないのでは?と思っていましたが,もしかしたらFlashプラグインの力でできるのか?とも思っていました. 引用:
またこれらの方法ですが,いずれもライブラリプロジェクトに対して行う必要があるということですよね?だとすると,ライブラリ作成時に知りえないクラスを,ライブラリの中からインスタンス化するということはできない,ということですよね? Javaのクラスローダのように,クラスをロードする直前にフックをかけられるとよいのですが... |
| dsh | 投稿日時: 2007-10-1 18:54 |
ご主人様 ![]() ![]() 登録日: 2006-3-29 居住地: 東京 投稿: 237 |
Re: flash.utils.getDefinitionByNameについて はじめまして。
引用:
変数を定義しなくてもできます。 詳しくはLa-valseさんのblogエントリをご参照ください。 http://blog.so-net.ne.jp/yoshimoto/2006-12-24 ※最後の方の【追記:その2やっと解決】周辺の部分が参考になると思います |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |