アプリケーションは、<mx:Application> タグによって定義された 1 つの Application オブジェクトを含む SWF ファイルにコンパイルされます。ほとんどの場合、Flex アプリケーションに含まれる Application オブジェクトは 1 つだけです。アプリケーションによっては、SWFLoader コントロールを使用して複数のアプリケーションを追加するものもあります。
Application オブジェクトには、次の特性があります。
Document オブジェクトは、Flex アプリケーションで使用されるすべての MXML ファイルに対して作成されます。例えば、Application オブジェクトでもあるドキュメントから、カスタムコントロールを定義する他の MXML ファイルを使用できます。
Document オブジェクトには、次の特性があります。
アプリケーションのメイン MXML ファイル、つまり <mx:Application> タグを含むファイルでは、this キーワードを使用することで Application オブジェクトのメソッドとプロパティにアクセスできます。ただし、カスタム ActionScript および MXML コンポーネント、イベントリスナーまたは外部 ActionScript クラスファイルでは、Flex はそれらのコンポーネントおよびクラスのコンテキスト内で実行され、this キーワードは Application オブジェクトではなく現在の Document オブジェクトを参照します。親ドキュメントの場所を指定せずにいずれかの子ドキュメントからアプリケーション内のコントロールまたはメソッドを参照することはできません。
親ドキュメントにアクセスするには、次のプロパティを使用します。
mx.core.Application.application 最上位の Application オブジェクト。ドキュメントツリーのどの場所でオブジェクトが実行されているかは関係ありません。
mx.core.UIComponent.parentDocument 現在のドキュメントの親ドキュメント。parentDocument.parentDocument を使用して、複数のドキュメントを含むツリーをさかのぼることができます。
mx.core.UIComponent.parentApplication 現在のオブジェクトが存在する Application オブジェクト。Flex アプリケーションはアプリケーションを他のアプリケーションにロードできるので、このプロパティを使用して直接の親アプリケーションにアクセスできます。parentApplication.parentApplication を使用して、複数のアプリケーションを含むツリーをさかのぼることができます。
mx.core.Application.application プロパティの使用
最上位の Application オブジェクトのプロパティとメソッドに、アプリケーションの任意の場所からアクセスするには、Application クラスの application プロパティを使用します。例えば、次のコードのようなメソッドを含むアプリケーションを定義します。
<?xml version="1.0"?>
<!-- containers\application\AppDoSomething.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:MyComps="myComponents.*">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
// Open an Alert control.
public function doSomething():void {
Alert.show("doSomething() called.");
}
]]>
</mx:Script>
<!-- Include the ButtonMXML.mxml component. -->
<MyComps:ButtonMXML/>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
続いて、次の例に示すように、ButtonMXML.mxml コンポーネントで Application.application プロパティを使用すると、doSomething() メソッドを参照できます。
<?xml version="1.0"?>
<!-- containers\application\myComponents\ButtonMXML.mxml -->
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
// To refer to the members of the Application class,
// you must import mx.core.Application.
import mx.core.Application;
]]>
</mx:Script>
<mx:Button label="MXML Button"
click="Application.application.doSomething();"/>
</mx:HBox>
application プロパティは、それぞれがデータの共有セットを使用する 1 つまたは複数のカスタム MXML または ActionScript コンポーネントを含むアプリケーションにおいて特に役立ちます。アプリケーションレベルでは通常、共有の情報を保持し、どのコンポーネントからもアクセスできるユーティリティ関数を提供します。
例えば、アプリケーションレベルでユーザー名を保持し、"Hi, userName" というストリングを返すユーティリティ関数 getSalutation() を実装するとします。次の MyApplication.mxml サンプルファイルに、getSalutation() メソッドを定義するアプリケーションのソースを示します。
<?xml version="1.0"?>
<!-- containers\application\AppSalutation.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:MyComps="myComponents.*">
<mx:Script>
<![CDATA[
public var userName:String="SMG";
public function getSalutation():String {
return "Hi, " + userName;
}
]]>
</mx:Script>
<!-- Include the ButtonGetSalutation.mxml component. -->
<MyComps:ButtonGetSalutation/>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
MXML コンポーネントで userName にアクセスして getSalutation() メソッドを呼び出すには、次の例に示すように、application プロパティが使用できます。この例は、MyComponent.mxml コンポーネントのコードです。
<?xml version="1.0"?>
<!-- containers\application\myComponents\ButtonGetSalutation.mxml -->
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" >
<mx:Script>
<![CDATA[
// To refer to the members of the Application class,
// you must import mx.core.Application.
import mx.core.Application;
]]>
</mx:Script>
<mx:Label id="myL"/>
<mx:Button
click="myL.text=Application.application.getSalutation();"/>
</mx:VBox>
この例では、Button コントロールをクリックすると、getSalutation() 関数が実行され、Label コントロールにテキストが格納されます。
オブジェクトの親ドキュメントにアクセスするには、parentDocument プロパティが使用できます。親ドキュメントは現在のオブジェクトを含むオブジェクトです。UIComponent クラスを継承するすべてのクラスは、parentDocument プロパティを持ちます。
次の例では、アプリケーションはカスタム AccChildObject.mxml コンポーネントを参照します。
<?xml version="1.0"?>
<!-- containers\application\AppParentDocument.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:MyComps="myComponents.*">
<!-- Include the AccChildObject.mxml component. -->
<MyComps:AccChildObject/>
</mx:Application>
前の例で実行する SWF ファイルは以下のとおりです。
この例では、アプリケーションが AccChildObject.mxml コンポーネントの親ドキュメントになっています。次のコードは AccChildObject.mxml コンポーネントのコードです。ここでは、parentDocument プロパティを使用して、Application コンテナより少し小さい Accordion コンテナを定義しています。
<?xml version="1.0"?>
<!-- containers\application\myComponents\AccChildObject.mxml -->
<mx:Accordion xmlns:mx="http://www.adobe.com/2006/mxml"
width="{parentDocument.width*.80}"
height="{parentDocument.height*.50}">
<mx:HBox/>
</mx:Accordion>
親ドキュメントのチェーンをさかのぼるには、MXML スクリプトで parentDocument プロパティを使用します。次の例のように、複数の parentDocument プロパティを使用して、このチェーン内を移動するのに parentDocument を使用することもできます。
parentDocument.parentDocument.doSomething();
Application オブジェクトの parentDocument プロパティは、アプリケーションへの参照です。
parentDocument は Object 型なので、祖先 Document オブジェクトのプロパティとメソッドにキャストせずにアクセスできます。
すべての UIComponent クラスは、isDocument プロパティを持ちます。このプロパティは、その UIComponent クラスが Document オブジェクトである場合に true に設定され、そうでない場合に false に設定されます。
UIComponent クラスが Document オブジェクトの場合は documentDescriptor プロパティを持ちます。このプロパティは、生成された Document クラス内に生成される記述子ツリーの最上位記述子を参照します。
例えば、AddressForm.mxml コンポーネントで住所フォームを定義する Form コンテナのサブクラスを作成し、MyApp.mxml コンポーネントでそのインスタンスを 2 つ(<AddressForm id="shipping"> と <AddressForm id="billing">)作成するとします。.
この例では、shipping オブジェクトは Document オブジェクトです。その documentDescriptor プロパティは、AddressForm.mxml ファイル(コンポーネントの定義)の最上位の <mx:Form> タグに対応します。一方、記述子は、MyApp.mxml ファイル(コンポーネントのインスタンス)の <AddressForm id="shipping"> タグに対応します。
parentDocument プロパティを使用してドキュメントチェーン内を移動する操作は、parentApplication プロパティを使用してアプリケーションチェーン内を移動する操作に似ています。
アプリケーションは他のアプリケーションをロードすることができるので、各アプリケーション内にドキュメントの階層を持つのと同じように、アプリケーションを階層化できます。すべての UIComponent クラスは、parentApplication 読み取り専用プロパティを持ちます。このプロパティは、オブジェクトが存在する Application オブジェクトを参照します。Application オブジェクトの parentApplication プロパティはそれ自体の参照ではなく、ロード先の Application オブジェクトか、または null(Application オブジェクトの場合)となります。
parentApplication プロパティを使用してアプリケーションチェーン内を移動する操作は、parentDocument プロパティを使用してドキュメントチェーン内を移動する操作に似ています。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート