Adobe Flex 3 ヘルプ

キューに対するコンテナの動的な追加

Application クラスの addToCreationQueue() メソッドを使用すると、コンテナをインスタンス化キューに動的に追加できます。addToCreationQueue() メソッドのシグネチャは次のとおりです。

addToCreationQueue(id:Object, preferredIndex:int, callbackFunction:Function, parent:IFlexDisplayObject):void

次の表で、addToCreationQueue() メソッドの引数について説明します。

引数

説明

id

キューに追加するコンテナの名前を指定します。

preferredIndex

(オプション)キュー内のコンテナの位置を指定します。デフォルトではコンテナはキューの最後に追加されますが、この値を指定すると、キュー内のコンテナの順序を明示的に選択できます。

callbackFunction

現時点で、このパラメータは無視されます。

parent

現時点で、このパラメータは無視されます。

addToCreationQueue() メソッドは、creationPolicy プロパティが none に設定されたコンテナをキューに追加する場合にのみ使用します。creationPolicy プロパティが auto または all に設定されたコンテナについては、アプリケーションの初期化中に子が生成される可能性があります。creationPolicy プロパティが queued に設定されているコンテナは既にキューに追加されています。

addToCreationQueue() メソッドで生成されるコンテナをキューに追加すると、キュー内の位置によっては、creationPolicyqueued に設定されているコンテナと競合することがあります。Flex は preferredIndex プロパティが最も低いコンテナを生成します。

次の例では、addToCreationQueue() メソッドを使用して、ユーザーが「後で生成」ボタンをクリックしたときに、HBox コンテナの子を生成します。addToCreationQueue() メソッドの呼び出しで、各ボックスに対して preferredIndex を指定することにより、アプリケーションのソースコードにおける出現順とは異なる順序(この場合は、box1、box3、box2、box4)で、各ボックスとその子が生成されます。

<?xml version="1.0"?>
<!-- layoutPerformance/AddToCreationQueueExample.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script><![CDATA[
        public function doCreate():void {
             addToCreationQueue('box1', 0);
             addToCreationQueue('box2', 2);
             addToCreationQueue('box3', 1);
             addToCreationQueue('box4', 3);
        }
    ]]></mx:Script>

    <mx:HBox backgroundColor="#CCCCFF" horizontalAlign="center">
        <mx:Label text="addToCreationQueue()" fontWeight="bold"/>
    </mx:HBox>

    <mx:Form>
        <mx:FormItem label="first:">
            <mx:HBox id="box1" creationPolicy="none" width="200" height="50" 
                    borderStyle="solid" backgroundColor="#CCCCFF">
                <mx:Button label="Button 1"/>
                <mx:Button label="Button 2"/>
            </mx:HBox>
        </mx:FormItem>
        <mx:FormItem label="fourth:">
            <mx:HBox id="box2" creationPolicy="none" width="200" height="50"
                    borderStyle="solid" backgroundColor="#CCCCFF">
                <mx:Button label="Button 3"/>
                <mx:Button label="Button 4"/>
            </mx:HBox>
        </mx:FormItem>
        <mx:FormItem label="second:">
            <mx:HBox id="box3" creationPolicy="none" width="200" height="50"
                    borderStyle="solid" backgroundColor="#CCCCFF">
                <mx:Button label="Button 5"/>
                <mx:Button label="Button 6"/>
            </mx:HBox>
        </mx:FormItem>
        <mx:FormItem label="third:">
            <mx:HBox id="box4" creationPolicy="none" width="200" height="50"
                    borderStyle="solid" backgroundColor="#CCCCFF">
                <mx:Button label="Button 7"/>
                <mx:Button label="Button 8"/>
            </mx:HBox>
        </mx:FormItem>
    </mx:Form>
    <mx:Button label="Create Later" click="doCreate();"/>
</mx:Application>

前の例で実行する SWF ファイルは以下のとおりです。

場合によっては、addToCreationQueue() メソッドが意図したとおりに動作しないことがあります。これは、インスタンス化キューが空の場合に、キューに格納される最初のコンテナが子の生成プロセスをトリガするからです。それ以降にその他のコンテナがキューに追加される場合でも、最初に追加されたコンテナのインスタンス化は、preferredIndex プロパティの値に関係なく、既にトリガされてしまっています。結果として、それ以外のコンテナがキューになかったために、preferredIndex 値が最小ではない項目についてコンテナの生成が開始されます。Flex では、インスタンス化がいったん開始した後に、最初のコンテナのインスタンス化を中止することはできません。

次の例では、redBox コンテナの preferredIndex の値が最大値であるにもかかわらず、コード内のこの行に来たときにキューに何も指定されていないため、子が最初に生成されます。redBox が完了するころにはキューに他のコンテナが指定されているので、キューに含まれる次に値が小さいアイテム、この場合は whiteBox コンテナに進み、その後 blueBox、最後に greenBox へと処理が進みます。

function doCreate():void {
     addToCreationQueue('redBox', 4);
     addToCreationQueue('blueBox', 2);
     addToCreationQueue('whiteBox', 1);
     addToCreationQueue('greenBox', 3);
}

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート