2009-03-22 4 views
0

異なるビュースタックパネルのコントロールを変更することに関して、Flexにいくつか問題があります。実行時には、特定のコントロールにアクセスできず、nullに戻ります。ここでは例の構造です:Flexのコントロールはいつアドレス可能になるのですか?

viewstack1 
    canvasPeople 
     datagridPeople 
    canvasDetails 
     tabNavigator1 
     canvasPersonDetail 
      txtLastname 
     canvasPersonOptions 
      comboboxOccupation 

私はcanvasBを有効にする設定のDataGrid1で "クリック" ハンドラ(viewstack1.selectedChild = canvasB)と、詳細オプションボックスを(tabNavigator1.selectedChild = canvasPersonOptions)持っています。前者は正常に動作しますが、後者はnullオブジェクトへのアクセスに関するエラーを返します。なぜなら、ユーザーがPeopleデータグリッド内の項目をクリックすると、tabNavigator1はその下のコントロールと同様にnullです。 (その親は、canvasDetailsですが、アドレス指定可能です)。現在、これは小さなアプリケーションなので、アイテムをロードするのとは異なります。 Flexがコントロールをレンダリングしてユーザが見る前にアクセスできるようにする方法を制御する方法はありますか?これがviewStackコントロール固有のものかどうかはわかりません。

答えて

2

はい、これは「作成ポリシー」と呼ばれ、すべてのコンテナクラスのプロパティです。私たちが探しているものを実行するには、作成ポリシーを "all"にすることができます。 "auto"がデフォルトです。

ContainerCreationPolicy.AUTOのcreationPolicyは、コンテナが必要になるまで子孫の一部またはすべての作成を遅らせることを意味します。これは遅延インスタンス化と呼ばれるプロセスです。このポリシーは、最初に作成されるUIComponentが少なくて済むため、起動時間が最適です。ただし、これにより、ユーザーが初めてアプリケーションの他の部分に移動するときのナビゲーションの遅延が発生します。 Accordion、TabNavigator、およびViewStackなどのナビゲータコンテナは、すべての子を直ちに作成することによってContainerCreationPolicy.AUTOポリシーを実装しますが、子コンテナの選択された子になるまで子の深い子孫を作成するのを待ちます。

ContainerCreationPolicy.ALLのcreationPolicyは、子コンテナが選択されるまで待つのではなく、各子に対してすぐに深い子孫を作成することを意味します。 VBoxコンテナなどの単一ビューコンテナの場合、ContainerCreationPolicy.AUTOポリシーとContainerCreationPolicy.ALLポリシーの間に違いはありません。ここ

さらに詳しい情報:

http://livedocs.adobe.com/flex/3/html/layoutperformance_04.html

このかかわらには注意してください:Flexは、理由のデフォルトとしてAUTOを選びました。アプリが大きくなると、creationPolicy = allの初期化時間が長くなります。

1

サブコンポーネントの作成は、creationPolicyプロパティによって制御されます。詳細は、Flex 3のドキュメントページ"About the creationPolicy property"に記載されています。

プロパティを "all"に設定すると、ViewStackが作成されるとすぐにViewStackコンテナのすべてのサブコンポーネントが作成されます。同じことがTabNavigatorで機能します。もちろん、これにはいくつかのパフォーマンスの影響があるかもしれません。これはドキュメントにも記載されています。

関連する問題