メタデータタグは Flex コンパイラに、Flex アプリケーション内でコンポーネントをどのように使用するかについて指示する情報を提供します。例えば、新しいイベントを定義するコンポーネントを作成するとします。MXML 内で参照できるようにそのイベントを Flex コンパイラに認識させるには、次の ActionScript クラス定義に示すように、コンポーネントに [Event] メタデータタグを挿入します。
[Event(name="enableChanged", type="flash.events.Event")]
class ModalText extends TextArea {
...
}
この例では、[Event] メタデータタグは、イベント名と、イベントによって送出されるイベントオブジェクトのタイプを定義するクラスを指定しています。イベントを Flex コンパイラに識別させると、次の例に示すように、MXML 内でそのイベントを参照できます。
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:MyComp="*">
<mx:Script>
<![CDATA[
function handleEnableChangeEvent(eventObj:Event):void {
...
}
]]>
</mx:Script>
<MyComp:ModalText enableChanged="handleEnableChangeEvent(event);"/>
</mx:Application>
クラス定義で [Event] メタデータタグを省略すると、Flex では、MXML ファイルのコンパイル時にシンタックスエラーが生成されます。このエラーメッセージは、Flex が enableChanged プロパティを認識しないということを示します。
Flex コンパイラは、ActionScript クラスファイルと MXML ファイル内のコンポーネントメタデータステートメントを認識します。メタデータタグは、コンポーネント属性、データバインディングプロパティ、イベント、およびコンポーネントのその他のプロパティを定義します。これらのステートメントは、Flex でコンパイル時に解釈されます。実行時には解釈されません。
メタデータステートメントは、クラス宣言、個々のデータフィールドまたはメソッドに関連付けられます。メタデータステートメントは、ファイル内でその次にある行にバインドされます。コンポーネントプロパティまたはメソッドを定義するときは、プロパティ宣言またはメソッド宣言の直前の行にメタデータタグを追加してください。
ActionScript ファイルでは、コンポーネントイベントを定義するときや、コンポーネント内で複数のプロパティに影響を与えるような要素を定義するときは、次の例に示すように、クラス定義の外側にメタデータタグを追加してください。これにより、メタデータがクラス全体にバインドされます。
// Add the [Event] metadata tag outside of the class file.
[Event(name="enableChange", type="flash.events.Event")]
public class ModalText extends TextArea {
...
// Define class properties/methods
private var _enableTA:Boolean;
// Add the [Inspectable] metadata tag before the individual property.
[Inspectable(defaultValue="false")]
public function set enableTA(val:Boolean):void {
_enableTA = val;
this.enabled = val;
// Define event object, initialize it, then dispatch it.
var eventObj:Event = new Event("enableChange");
dispatchEvent(eventObj);
}
}
この例では、クラス定義の前に [Event] メタデータタグを追加します。これによって、クラスは enableChanged イベントを送出します。また、Adobe® Flex™ Builder™ のプロパティのデフォルト値を示す [Inspectable] メタデータタグも追加します。[Inspectable] タグの使用について詳しくは、Inspectable メタデータタグを参照してください。
次の例に示すように、MXML ファイルではメタデータタグを ActionScript コードと共に <mx:Script> ブロックに挿入するか、または <mx:Metadata> ブロックに挿入します。
<?xml version="1.0"?>
<!-- TextAreaEnabled.mxml -->
<mx:TextArea xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Metadata>
[Event(name="enableChange", type="flash.events.Event")]
</mx:Metadata>
<mx:Script>
<![CDATA[
// Import Event class.
import flash.events.Event;
// Define class properties and methods.
private var _enableTA:Boolean;
// Add the [Inspectable] metadata tag before the individual property.
[Inspectable(defaultValue="false")]
public function set enableTA(val:Boolean):void {
_enableTA = val;
this.enabled = val;
// Define event object, initialize it, then dispatch it.
var eventObj:Event = new Event("enableChange");
dispatchEvent(eventObj);
}
]]>
</mx:Script>
</mx:TextArea>
<mx:Metadata> タグと <mx:Script> タグの主な相違点は、<mx:Metadata> タグ内のテキストは生成されたクラス宣言の前に挿入されるのに対して、<mx:Script> タグ内のテキストは生成されたクラス宣言の本体に挿入されることです。したがって、[Event] や [Effect] などのメタデータタグは <mx:Metadata> タグ内に追加し、[Bindable] や [Embed] などのメタデータタグは <mx:Script> タグ内に追加します。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート