3

AS3内では、ロードされたSWFの先頭にこれを含めることで、たとえば外部からロードされたSWFにステージがアクセス可能かどうかを確認できます。

if (stage) {
  this.init();
} else {
  addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}

上記のソリューションは、これらの行が実行されるまでにプログラムがステージにアクセスできるかどうかを確認したり、ステージにアクセスできるときにリッスンするイベントリスナーを追加したりするのに最適です。

Flex4.6のカスタムコンポーネント内で同様の状況を再現しようとしています。creationCompleteただし、ステージの存在を聞くのではなく、コンポーネントのイベントが発生したかどうかを探しています。

イベントが発生したかどうかについて同様の解決策があり、発生creationCompleteしていない場合はそれをリッスンしますか?

4

3 に答える 3

3

Windows grepped 4.6 sourceで、初期化がtrueに設定されている場合、UIComponentは作成完了イベントをディスパッチするため、http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html#initializedが機能するはずです。 。

EDIT コメントに応答して、initializeが呼び出されますが、ステップ9でtrueに初期化されたセットは発生しません。文字通り、UIComponent内でCREATION_COMPLETEがディスパッチされます。UIComponentの4.6ソースから取得した次のスニペットを参照してください。

   

/**
     *  A flag that determines if an object has been through all three phases
     *  of layout: commitment, measurement, and layout (provided that any were required).
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */

/**
 *  @private
 */

public function set initialized(value:Boolean):void
{
    _initialized = value;

    if (value)
    {
        setVisible(_visible, true);
        dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE));
    }
}

UIComponentでCtrl+Shift + Tを押して「変数:作成」を検索すると思わない場合は、スタートアップイベントがディスパッチされるセクションを開始するコメントブロックと、それらのイベントにフラグを立てるためのいくつかの変数が表示されます。完了が設定されています。INITIALIZEイベントは、私が参照したセッターの下の別のセッターで発生します。

public function set processedDescriptors(value:Boolean):void
{
    _processedDescriptors = value;

    if (value)
        dispatchEvent(new FlexEvent(FlexEvent.INITIALIZE));
}
于 2012-07-20T04:05:29.547 に答える
1

コンポーネントにcreationCompleteイベントリスナーを追加して、ハンドラー関数のロジックを実行してみませんか?また、次のような単一のブールプロパティを作成してみることができます。

public var isInitialized:Boolean = false;

function creationCompleteHandler(e:Event):void
{
   isInitialized = true;
   //code here
}

そうすれば、外部ソースから初期化されているかどうかを確認できます。

于 2012-07-19T18:31:27.273 に答える
0

ステージにアクセスできるかどうかを確認するとき、applicationCompleteはサイクルの最後のステージであるため、creationCompleteの代わりにapplicationCompleteを使用しないのはなぜですか?すべてのアプリケーションコンポーネントのcreationCompleteは、applicationCompleteの前に起動する必要があると思います。何らかの理由でアプリケーションの準備が整う前にcreationCompleteにアクセスしようとしていますか?

私はこれを振り返ったところですが、なぜあなたがもっと難しい解決策を積極的に探しているのかはまったくわかりません。この解決策はうまくいくはずであり、個人的にはそれが正しいものだと感じています。確かにcreationCompleteが起動したかどうかを確認することはできますが、この機能が明示的に必要でない限り、ライフサイクルを利用してロジックの適切な分離を確実に利用できる場合、creationCompleteを確認するポイントはわかりません...

于 2013-11-23T22:23:50.847 に答える