Flex 4 SDK新特性チュートリアルシリーズ


この章はFlex 4 SDK新特性チュートリアルシリーズの第4章です.この章ではMXML 2009に追加されたラベルを紹介します.
  • Declarations
  • Vector
  • Library
  • Definition
  • Private
  • Reparent

  • DeclarationsタグはFlex 4で最も一般的な新規タグです.Flex 3では、1つのMXMLコンポーネントの直接的なサブ要素に対して、以下のような場合があり得る.
    <mx:Label
     xmlns:mx="http://www.adobe.com/2006/mxml"
    >
    
    
        <mx:text
    >
    
    
            <mx:String
    >
    
    test</mx:String
    >
    
    
        </mx:text
    >
    
    
    </mx:Label
    >
    
    
    2.デフォルト属性の値として、例えばListのデフォルト属性はData Providerです.
    <mx:List
     xmlns:mx="http://www.adobe.com/2006/mxml"
    >
    
    
        <mx:ArrayCollection
    >
    
    
           ....
        </mx:ArrayCollection
    >
    
    
    </mx:List
    >
    
    
    3.容器としてのChildren:
    <mx:Canvas
     xmlns:mx="http://www.adobe.com/2006/mxml"
    >
    
    
        <mx:Button
     />
    
    
        <mx:Label
     />
    
    
    </mx:Canvas
    >
    
    
    4.非可視化オブジェクトを宣言して作成する:
    <mx:Canvas
     xmlns:mx="http://www.adobe.com/2006/mxml"
    >
    
    
       <mx:HTTPService
     id="sevice"
     />
    
    
    </mx:Canvas
    >
    
    
    Flex 4では、MXMLコンポーネントの直接サブ要素について、より規範的な定義がある.すなわち、すべての直接サブ要素またはコンポーネントの属性ラベル、またはコンポーネントのデフォルト属性の値として存在する.容器のデフォルト属性は、そのChildrenのセット(例えば、Groupのデフォルト属性はmxmlContent、DataGroupのデフォルト属性はdata Provider)である.
    最後の場合、Flex 4では、HTTPService、Effect、基本データタイプなどの非可視化オブジェクトをMXMLで作成し、必ず「Declarations/」タブで作成します.例えばHTTPServiceオブジェクトを宣言します.
    <s:Group
     xmlns:fx="http://ns.adobe.com/mxml/2009"
    
    
              xmlns:s="library:ns.adobe.com/flex/spark"
     >
    
    
        <fx:Declarations
    >
    
    
            <s:HTTPService
     id="service"
     />
    
    
        </fx:Declarations
    >
    
    
    </s:Group
    >
    
    
    上のコードはアクションScriptに相当します.
    public
     MyGroup extends Group {
    
        private
     var
     service:
    HTTPService = new
     HTTPService(
    )
    ;
    }
    
    なお、Declarationsタグは、任意の可視化コンポーネントを宣言し、作成するためにも使用されてもよいが、このラベルを使用して作成されたコンポーネントはDisplayListには加入されず、初期化されない.必要な時にまた使ってもいいです.
    <Vector/>
    VectorはFlash Player 10に新たに追加されたデータタイプであり、多くの場合、Vectorを使用することはArayを使用するよりも効率的である.Flex 4では、MXMLを通じてVectorオブジェクトを作成できます.例えば、
    <fx:Declarations
    >
    
    
        <fx:Vector
     id="myVector"
     type="String"
     fixed="false"
     />
    
    
    </fx:Declarations
    >
    
    
    上記のコードはアクションScriptに相当します.
    public
     var
     myVector:
    Vector.<
    String>
     = new
     Vector.<
    String>
    (
    0
    ,false
    )
    ;
    <Library/>
    Libraryタグにより、現在のMXMLコンポーネントのために「クラス」を宣言することができます.したがって、Definitionタグはクラスライブラリの一つを定義することができます.基本的な文法ルールは以下の通りです.
  • Libraryタグを使用すると、MXMLまたはFXGドキュメントの最初のラベルである必要があります.
  • Libraryタグは、1つまたは複数のDefinitionタグを含むことができる.
  • は、Definitionタグに「クラス名」としてname属性を提供しなければならない.一方、Definitionタグは、その定義されたクラスのベースクラスとして直接サブタグを持つしかない.
  • Definitionタグで定義されたクラスは、およびタグを使用することもできます.
  • Definitionタグによって定義されているクラスはデフォルトのパケットであり、MXML 2009の名前空間を使用して参照する必要があります.クラス名がMyClassであれば、MXMLでこのクラスのラベルはです.
  • LibraryとDefinitionタグは入れ子できません.すなわちDefinitionによって定義されたクラスでは、LibraryとDefinitionタグは使用できません.
  • 次のコードでは、LibraryとDefinitionタグを使ってMyClassクラスとそのサブクラスのMySubClassを作成しました.
    <!-- MyApp.mxml -->
    
    
    <s:Applicaiton
     xmlns:fx=... >
    
    
      <fx:Library
    >
    
    
        <!--          MyClass  ,   Group  -->
    
    
        <fx:Definition
     name="MyClass"
    >
    
    
            <s:Group
    >
    
    
               <s:Rect
     width="200"
     height="200"
    >
    
    
                   <s:fill
     .../>
    
    
               </s:Rect
    >
    
    
            </s:Group
    >
    
    
        </fx:Definition
    >
    
    
        <!--          MySubClass  ,   MyClass >
    
    
        <fx:Definiton
     name="MySubClass"
    >
    
    
          <fx:MyClass
     />
    
    
        </fx:Definition
    >
    
    
      </fx:Library
    >
    
    
     
      <!--   MyClass MySubClass  -->
    
    
      <fx:MyClass
     />
    
    
      <fx:MySubClass
     />
    
    
    </s:Application
    >
    
    
    さらに、Definitionによって定義されたクラスの例は、id属性を付与することができない(例えば、上のコードでは、MyClassのインスタンスにid属性を宣言するとコンパイルエラーが発生する).これは本質的にはLibraryの「私有性」によって決まる.多くの場合、再使用可能なグラフィック要素を定義するためにFXGで使用されます.
    実際には、Definitionに定義されていないクラスのインスタンスにID属性を与えることができますが、これらのクラスの実例の参照を得ることができます.Flexコンパイル後のASコードを見ると、Definitionによって定義されたクラスは最終的に「MXMLクラス名_」に分類されます.definitionN.asという独立アクションScript類です.例えば、上記の例(MXML類はMyApp)のMyClassとMySubClassは最終的にMyApp_に変換されます.definition 1とMyApp_definitions 2これらのクラスの実際のクラス名を決定した後、いくつかのシステムイベントを通じてこれらのクラスの参照を取得し、それらを動作させてもよい.
    <!-- Test.mxml -->
    
    
    <?xml version="1.0"
     encoding="utf-8"
    ?>
    
    
    <s:Application
     xmlns:fx="..."
     xmlns:s="..."
     >
    
    
        <fx:Library
    >
    
    
    	<fx:Definition
     name="MyRect"
     >
    
    
    	    <s:Group
     width="100"
     height="100"
    >
    
    
    		....
    	    </s:Group
    >
    
    
            </fx:Definition
    >
    
    
        </fx:Library
    >
    
    
     
        <fx:MyRect
     creationComplete="myrect1_creationComplete(event)"
    />
    
    
     
        <fx:Script
    >
    
    
    	<![
    CDATA[
    
    
    	import mx.events.FlexEvent;
    
    	private var myRect:Test_definition1  ;
    
     
           <!--             -->
    
    		
            protected function myrect1_creationComplete(event:FlexEvent):void
            {
                myRect = event.target as Test_definition1;
    	    myRect.x = 200;
    	}
            ]]>
        </fx:Script
    >
    
    
    </s:Application
    >
    
    
    <Private/>
    PrivateラベルはMXMLとFXGドキュメントのメタ情報を提供するために使用されます.ラベル内の内容はコンパイラによって無視されます.それでも、その内容がXML形式で有効であることを保証しなければなりません.たとえば:
    <fx:Private
    >
    
     
        <Author>
    
    Jinni Cao</Author>
    
     
        <Version>
    
    1.0</Version>
    
    
        <Site>
    
    http://www.SWFever.com</Site>
    
    
    </fx:Private
    >
    
    
    <Reparent/>
    次の章「改善されたビュー状態文法」では、Reparentラベルの使い方を詳しく紹介します.
    この章では、MXML 2009に新しく追加された言語レベルのラベルをいくつか紹介しています.次の章では、Flex 4で大幅に改善された特性を紹介します.ビュー状態(View State).