2

AIRでモバイルアプリケーションを作成していますが、同じ問題が発生することがよくあります。実行の順序は何ですか。UIクラスの初期化、作成などの順序を決定できることを私は知っています。また、トレースステートメントをすべてのクラスのコンストラクターに入れて、そのようにすることもできます。しかし、それは退屈です。

ロード時に各クラスがそれ自体を「アナウンス」する一般的なコードはありますか?誰かがこのようなことを書いたことがありますか?

擬似コードは次のようになります。

for each var class:Class in application
{
     trace(class.getQualifiedClassName.toString();
}

ありがとう。

編集:

これが例です。MyApp.mxmlを実行し、それにトレースステートメントを配置します。最初のビューは、xmlを介してサーバーから取得された配列によって入力されたリストです。ただし、アプリが読み込まれると、リストは空白になります。なんで?手動で挿入したトレースステートメントに基づいて、イベントの順序は次のとおりです。

MyApp::viewnavigatorapplication1_intitializeHandler firing
Model::initialize function firing
XMLLoader::going to http://mysite.com/myxml.xml
MyApp::addedToStageHandler running
HomeListView::viewActivateHandler firing
XMLLoader::xmlLoaded

リストが空白である理由は、HomeListViewがアクティブ化された後にxmlがロードされるためです。したがって、クラスごとにクラスに書き込むことなく、このすべての情報を取得する方法があると便利です。また、すべてのクラスが表示リストに含まれているわけではないことに注意してください(ModelやXMLLoaderなど)。

4

2 に答える 2

2

AS3Tracemm.cfgファイルで指定すると、実行中の関数の完全なファイアホースが得られます。

その他の非表示のmm.cfg機能については、このブログ投稿を参照してください。モバイルアプリでmm.cfgを実行するためのヘルプがいくつかあります。

于 2012-12-12T22:20:37.620 に答える
0

これがあなたが望むものに近いものです:

var numChildren:Number = this.numChildren;
for (var i:int = 0; i < numChildren; i++) {
    var displayObject:DisplayObject = this.getChildAt(i);
    displayObject.addEventListener(FlexEvent.INITIALIZE, function (e:FlexEvent):void {
        trace("child " + displayObject.name +" is initializing" );
    });
    displayObject.addEventListener(FlexEvent.CREATION_COMPLETE, function (e:FlexEvent):void {
        trace("child " + displayObject.name +"'s creation is completed" );
    });                     
}

initializeメインアプリケーションのイベントハンドラーに追加する必要があります。

于 2012-12-12T19:25:02.477 に答える