2009-03-30 7 views
1

は、与えられた以下:Flexコンパイラのメタデータ "DefaultProperty"

<?xml version="1.0"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2009/mxml"> 
    <mx:Panel title="blah"> 
     <mx:Button /> 
    </mx:Panel> 
</mx:Application> 

はあなたが私に言うことができる場所子要素親要素に割り当てられている(例:MX。ボタン)(例:MX:パネル)デフォルトではmxmlcによって設定されます。 「DefaultProperty」コンパイラメタデータタグを設定して、割り当て先を指定することができますが、指定されていない場合はflexの動作を指定できます。

たとえば、mx:Panelが継承するすべてのフレックスクラスのソースをトラバースしていますが、DefaultPropertyは何も言及されていないため、DefaultPropertyのデフォルト値がわかりません。

ご迷惑をおかけして申し訳ありませんが、私は内部のドキュメントを読んでいます。

答えて

4

ASベースのコンポーネントを作成する場合、デフォルトプロパティで子タグとして使用できるプロパティを指定できます。例:

<MyComp:TextAreaDefaultProp>Hello</MyComp:TextAreaDefaultProp> 

あなたにも使うことができた:

<MyComp:TextAreaDefaultProp defaultText="Hello" /> 

を指定しないとどうなりますかあなたはそのプロパティの値を取得しません。次のコンポーネントを考える:

package 
{ 
    // as/myComponents/TextAreaDefaultProp.as 
    import mx.controls.TextArea; 

    // Define the default property. 
    [DefaultProperty("defaultText")] 

    public class TextAreaDefaultProp extends TextArea { 

     public function TextAreaDefaultProp() 
     { 
      super(); 
     }  

     // Define a setter method to set the text property 
     // to the value of the default property. 
     public function set defaultText(value:String):void { 
      if (value!=null) 
      text=value; 
     } 

     public function get defaultText():String { 
      return text; 
     } 
    }  

} 

実行このスニペット:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
      layout="absolute" width="535" height="345" 
      xmlns:local="*"> 
<mx:VBox> 
<local:TextAreaDefaultProp id="a" defaultText="Hello"/> 
<local:TextAreaDefaultProp id="b" > World </local:TextAreaDefaultProp> 
<local:TextAreaDefaultProp id="c" /> 
<mx:TextArea id="z"/> 
<mx:Button click="{z.text = a.defaultText 
           + ' ' + b.defaultText 
           + ' ' + (c.defaultText.length);}" /> 

</mx:VBox> 
</mx:Application> 
1

コンパイラは、実際には、特殊なケースとして、コンテナの子コンポーネントを扱います。いくつかの説明についてはmx.core.ContainerchildDescriptorsプロパティを見てください。 MXMLでFlexコンポーネントインスタンスを作成すると、すぐにインスタンス化されることはありません。代わりに、コンテナのcreationPolicyプロパティによって決定されるように、将来のある時点でコンポーネントをインスタンス化するために "記述子"が作成されます。 -keep-generated-actionscript引数(または短縮版、-keep)をコンパイラの引数に追加すると、コンパイラがMXMLから生成するAS3コードを見ることができます。