コンポーネント、コンテナ、コンテナの子の生成を保留するには、creationPolicy プロパティを使用します。すべてのコンテナには、コンテナが生成されたときにどの子孫を生成するかを決定する方法を指定した creationPolicy プロパティがあります。コンテナのポリシーは、MXML または ActionScript を使用して変更できます。
creationPolicy プロパティの有効な値は、auto、all、none、および queued です。これらの設定は、複数のビューを持つナビゲータコンテナと、ビューを 1 つしか持たないコンテナとで意味が異なります。これらの値の意味については、単一ビューコンテナおよび複数ビューコンテナを参照してください。
creationPolicy プロパティは継承されません。つまり、外側のコンテナで creationPolicy プロパティの値が none に設定されていても、そのすべての子コンテナでは、特に指定がない限り creationPolicy プロパティのデフォルト値が使用されます。none の値が creationPolicy に継承されるわけではありません。また、同じ種類の 2 つのコンテナが同じレベルに存在する場合、一方の creationPolicy を設定しても、もう一方のコンテナでは明示的な設定がない限り、creationPolicy プロパティのデフォルト値が使用されます。
デフォルトでは、アプリケーションが最初に起動されたときに単一ビューコンテナのすべての子が生成されます。この動作を変更する場合は、creationPolicy プロパティを変更します。次の表は、creationPolicy プロパティを単一ビューコンテナで使用した場合の値について説明しています。
|
値 |
説明 |
|---|---|
|
all, auto |
単一ビューコンテナに含まれるすべてのコントロールを生成します。デフォルト値は auto ですが、all でも結果的に同じ動作になります。 |
|
none |
コントロールを手動でインスタンス化するまで、コンテナ内のコンポーネントを一切インスタンス化しないよう Flex に指示します。 creationPolicy プロパティの値が none の場合は、そのコンテナの幅と高さを明示的に設定します。通常、Flex は、子がちょうど収まるサイズにコンテナを拡大 / 縮小しますが、子が生成されていないと、適切に拡大 / 縮小することができません。コンテナのサイズを明示的に設定しないと、子が生成されたときに、それに合わせてサイズが拡大してしまいます。 コントロールを手動でインスタンス化するには、createComponentsFromDescriptors() メソッドを使用します。詳細については、遅延コンポーネントの生成を参照してください。 |
|
queued |
このプロパティは、遅延生成には影響しません。creationPolicy プロパティの値 queued の使用の詳細については、順序付き生成の使用を参照してください。 |
次の例では、VBox コンテナの creationPolicy プロパティを auto(デフォルト)に設定します。
<?xml version="1.0"?>
<!-- layoutperformance/AutoCreationPolicy.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:VBox id="myVBox" creationPolicy="auto">
<mx:Button id="b1" label="Get Weather"/>
</mx:VBox>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
すべての単一ビューコンテナのデフォルトの動作により、アプリケーション起動時にコンテナ自身とその子がすべてインスタンス化されます。ただし、creationPolicy プロパティを none に設定すると、遅延コンポーネントの生成で説明されている手法で、コンテナ内のコントロールを選択してインスタンス化できます。
ViewStack や Accordion などの複数ビューを持つコンテナの場合は、すべての子孫が直ちに生成されるのではなく、初期状態で表示される子孫だけが生成されます。初期状態で表示されない子孫は、ユーザーがそれを含むビューに移動するまでは生成されません。次のコンテナは複数のビューを持つので、ナビゲータコンテナとして定義されています。
ナビゲータコンテナをインスタンス化すると、すべての最上位の子が生成されます。例えば、Accordion コンテナを生成する場合は、コンテナの各ビューの生成がトリガされますが、それらのビュー内に含まれるコントロールは生成されません。個々のビューに含まれる子コントロールの生成は、creationPolicy プロパティによって制御されます。
creationPolicy プロパティを auto(デフォルト値)に設定すると、ナビゲータコンテナは、初期ビューに表示されるコントロールとその子だけをインスタンス化します。次の例に示すように、Accordion コンテナの最初のビューが初期ビューになります。
ユーザーが Accordion コンテナの別のパネルに移動すると、そのパネルの次のコントロールセットが生成され、新しいビューのコントロールとその子が順次生成されます。この動作を変更する場合は、Accordion コンテナの creationPolicy プロパティを使用します。次の表は、creationPolicy プロパティをナビゲータコンテナで使用した場合の値についての説明です。
|
値 |
説明 |
|---|---|
| all |
ナビゲータコンテナのすべてのビューの、すべてのコントロールを生成します。この設定にすると、アプリケーションの起動時間は長くなりますが、ユーザーのナビゲーションに対する応答時間が短縮されます。 |
| auto |
ナビゲータコンテナの初期ビューについてのみ、すべてのコントロールを生成します。この設定にすると、アプリケーションの起動時間は短縮されますが、ユーザーのナビゲーションに対する応答時間が遅くなります。 複数ビューコンテナでは、これがデフォルトの設定になります。 |
| none |
コントロールを手動でインスタンス化するまでは、ナビゲータコンテナやそのパネル内のコンポーネントを一切インスタンス化しないよう Flex に指示します。 コントロールを手動でインスタンス化するには、createComponentsFromDescriptors() メソッドを使用します。詳細については、遅延コンポーネントの生成を参照してください。 |
| queued |
このプロパティは、遅延生成には影響しません。creationPolicy プロパティの値 queued の使用の詳細については、順序付き生成の使用を参照してください。 |
次の例では、Accordion コンテナの creationPolicy プロパティを all に設定して、アプリケーション起動時に、ナビゲータコンテナの各パネルのすべてのコントロールがインスタンス化されるようにします。
<?xml version="1.0"?>
<!-- layoutperformance/AllCreationPolicy.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Panel title="Accordion">
<mx:Accordion id="myAccordion" creationPolicy="all">
<mx:VBox label="Accordion Button for Panel 1">
<mx:Label text="Accordion container panel 1"/>
<mx:Button label="Click Me"/>
</mx:VBox>
<mx:VBox label="Accordion Button for Panel 2">
<mx:Label text="Accordion container panel 2"/>
<mx:Button label="Click Me"/>
</mx:VBox>
<mx:VBox label="Accordion Button for Panel 3">
<mx:Label text="Accordion container panel 3"/>
<mx:Button label="Click Me"/>
</mx:VBox>
</mx:Accordion>
</mx:Panel>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート