3

すべての準備ができたら、XMLから読み込んでいる変数に基づいて状態を設定する必要があるコンポーネントがあります。で試してみましたcreationCompleteが、要素が適切にレンダリングされて状態が設定されていないため、明らかに準備ができていませんが、要素のクリックアクションで後続の状態変更を行うと、状態とレンダリングは正常に機能します。

includeInこの状況で、状態が適切なタイミングで設定され、レンダリングできるように存在するために表示されるはずの要素を確認するにはどうすればよいですか?initialize代わりにcreationComplete、コンポーネントが初めて作成されたときにトリックを実行しないようです。コンポーネントへの連続した呼び出しはすべて問題ありません。

4

3 に答える 3

4

参考までに、機能しinitializeなかったのは当然のことです。子要素が作成される前に起動されてから、creationComplete起動されます。は、creationComplete初期化ライフサイクルで発生する最後のイベントです。

creationCompleteコンポーネントのイベントが時期尚早に発生した場合は、親コンテナから子コンポーネントの状態を変更する必要がある場合があります。

creationCompleteすべての子コンポーネントがそれらを起動した後に、すべてのコンポーネントが起動しcreationCompleteます。

コンポーネントのインスタンス化のライフサイクルについては、 Adobeのドキュメントをご覧ください

CreationPolicy

creationPolicyアプリの属性をに設定する必要がある場合もありますallauto(デフォルトは)だと思います

enterState

状態内のオブジェクトを実行すると、状態宣言でイベン​​トハンドラーをフックenterStateできます。

visible.stateプロパティ。

最終的に、状態ベースのオブジェクトのコンテナを非表示/レイアウトに含まれないように設定できます(表示およびincludeInLayoutプロパティ)。場合によっては、コードを介してオブジェクトに到達する他の方法はありません。オブジェクトは存在しないためです。 。ただし、enterStateビューステートに入ったときにのみ実行する必要があるため、そのステート内のオブジェクトは完全に使用可能である必要があります。

于 2011-02-02T03:54:36.547 に答える
1

itemCreationPolicy = immediateを設定することで、アクセスする必要のあるステートフルコンポーネントを強制的に実行できると思います。次に、それらはcreationCompleteに存在します。

<s:states>
<s:State name="normal" />
<s:State name="special" />
</s:states>

<s:Label text="normal" includeIn="normal" /> //is available creationComplete
<s:Label text="special1" includeIn="special" itemCreationPolicy="immediate" /> //is available creationComplete
<s:Label text="special2" includeIn="special" /> //not available creationComplete
于 2011-04-27T03:49:11.927 に答える
1

状態が表示されるたびに画面のリセットを確認する必要がありましたが、同じ状況でした。最初の答えは私が必要としていたものでしたが、それを整理するのに少し時間がかかりました。これが重要なポイントでした。

状態宣言のenterStateにイベントハンドラーをフックできます...[強調を追加]

...次のようになります:

protected function state1_enterStateHandler(event:FlexEvent):void
{
    myComponent.reset();
}

<s:states>
    <s:State id="state1" name="state1" enterState="state1_enterStateHandler(event)" />
    <s:State name="state2" />
</s:states>

<views:MyComponent id="myComponent" includeIn="state1" />

イベントハンドラーをmyComponentに追加しようとしても成功しませんでした。私はむしろそこにそれを持っていたいのですが、これは状態が再び有効になるたびに更新する唯一の方法のようでした。

この呼び出しは、state1がcurrentStateになり、すべてのコンポーネントの準備が整い、プロパティが設定されるたびにリセットされます。

于 2011-08-18T20:13:04.457 に答える