2010-04-18 4 views
7

ich ein MXML benutzerdefinierte Komponenten implementiert haben, und ich würde gerne Parameter an den Konstruktor übergeben:Passing Konstruktorparameter für MXML-basierte benutzerdefinierte Flex-Komponenten

newUser = new userComp("name"); 

anstelle von Set-Methoden.

Ist dies möglich, wenn die benutzerdefinierten Komponenten haben in MXML (mit initialize=myPseudoCostructor() Methode?) Gebaut

Oder ich kann nur den Parameter mit einer zusätzlichen Codezeile gesetzt?

Antwort

5

Sie können pass variables nicht in einen Konstruktor der MXML-Komponente einfügen. Ich glaube nicht einmal, dass es in einer MXML-Komponente möglich ist, define a constructor, obwohl ich falsch liegen könnte. Sie können jedoch Eigenschaften einrichten, die Standardwerte haben und nach der Konstruktion geändert werden.

Sie können auch eine Initialisierungsfunktion erstellen, die auch nach der Konstruktion aufgerufen wird.

+0

ok, wenn ich also eine benutzerdefinierte Komponente mit mxml erstelle, kann ich die Variablen erst später beim Aufruf ihrer Methoden setzen. – aneuryzm

+0

Sie können einen Konstruktor in einer MXML-Komponente definieren, und Sie können sogar Parameter in diesem Konstruktor haben; Die Einschränkung besteht jedoch darin, dass alle Parameter für den Konstruktor optional sein müssen. – Panzercrisis

+0

Ich bekomme 'Mehrere Konstruktordefinitionen gefunden. Konstruktor ist möglicherweise nicht in

1
IN COMPONENT (cosa) 

<fx:Declarations> 
<fx:String id="name">Jon Doe</String> 
</fx:Declarations> 
<fx:Script> 
trace("hola "+name) 
</fx:Script> 
<s:Label text="Hola {name}"/> 

IMPLEMENT 
<cosa name="Juan Perez"/> 
3

Ich habe vor kurzem in dieses Problem - was Sie tun können, ist eine Initialisierung-Funktion erstellen, die die Komponente zurückgibt:

Innerhalb der Komponente (genannt, um ihrer selbst willen Argument, MyComponent):

public function init(...args):MyComponent { 

    //Add constructor code here 

    return this;  
} 

... wenn eine Komponente erstellen, können Sie wie folgt aufrufen:

var myComp:MyComponent = new MyComponent().init(args); 

wie es ret Urn das Objekt, Sie können es als Konstruktor behandeln. Ich musste diese Methode in letzter Zeit sehr oft verwenden, scheint die beste Methode, um das Problem zu umgehen.