2009-03-30 3 views
1

Angesichts der folgenden:Flex Compiler Metadaten "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> 

Können Sie mir sagen, wo Kind Elemente (ex mx:. Taste) zugeordnet sind, in geordneten Elemente (ex mx:. Panel) Standardmäßig nach mxmlc. Sie können das Compiler-Metadaten-Tag "DefaultProperty" festlegen, um anzugeben, wo sie zugewiesen sind, aber was Flex tut, wenn es nicht angegeben ist.

Zum Beispiel habe ich die Quelle aller Flex-Klassen Mx durchlaufen: Panel erbt von und DefaultProperty wird nie erwähnt, was mich zu fragen, was der Standardwert von DefaultProperty.

Sorry für jede noobishness aber ich habe die Dokumente von innen nach außen gelesen.

Antwort

4

Beim Schreiben AS-basierter Komponenten können Sie mit der Standardeigenschaft eine Eigenschaft angeben, die Sie als untergeordnetes Tag verwenden können. ZB:

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

Sie könnten auch verwendet haben:

<MyComp:TextAreaDefaultProp defaultText="Hello" /> 

Was, wenn Sie nicht angeben passiert? Sie erhalten keinen Wert für diese Eigenschaft. Gegeben die folgende Komponente:

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; 
     } 
    }  

} 

Führen Sie dieses Snippet:

<?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

Der Compiler behandelt tatsächlich untergeordneten Komponenten von Containern als Sonderfall. Werfen Sie einen Blick auf die childDescriptors Eigenschaft von mx.core.Container für einige Erklärung. Wenn Sie eine Flex-Komponenteninstanz in MXML erstellen, wird sie nicht sofort instanziiert. Stattdessen wird ein "Deskriptor" erstellt, mit dem die Komponente zu einem späteren Zeitpunkt instanziiert wird, wie in der Eigenschaft creationPolicy des Containers festgelegt. Wenn Sie das Argument -keep-generated-actionscript (oder die verkürzte Version -keep) zu Ihren Compiler-Argumenten hinzufügen, können Sie den AS3-Code sehen, den der Compiler aus MXML generiert.