Since most classes in the Flex framework are non-dynamic, assigning the
value "canvas1" to the 'id' property at runtime can't create an instance
variable called canvas1 that contains a reference to your new Canvas,
which is what the MXML compiler does when it processes the id="canvas1"
attribute at compile time.

 

However, you can simply declare this instance variable yourself:

 

private var canvas1:Canvas;

 

private function addCanvas(oEvent:Event):void

{

    canvas1 = new Canvas();

    canvas1.width = 300;

    canvas1.height = 100;

    addChild(canvas1);

}

 

private function addControlToCanvas(oEvent:Event):void

{

    var textAreaNew:TextArea = new TextArea();

    textAreaNew.text = "Hello, Other World!";

    canvas1.addChild(textAreaNew);

}

 

This is the recommended technique. We don't recommend using
getChildByName() to find dynamically created components.

 

- Gordon

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Tracy Spratt
Sent: Monday, November 27, 2006 1:49 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Using Container.addChild(), can we not assign the
id property and use it to refrence the new control?

 

When I try, I get an error that the control is not a property of the
app.  For example:

I add a Canvas, and set the ID

  private function addCanvas(oEvent:Event):void

  {

    caNew = new Canvas();

    caNew.id = "canvas1"

    caNew.name = "canvas1";

    caNew.width = 300;

    caNew.height = 100;

    this.addChild(caNew);

  }//  

  

//I try to add a control to the canvas

  private function addControlToCanvas(oEvent:Event):void

  {

    var TextAreaNew:TextArea = new TextArea();

    TextAreaNew.text = "Hello, Other World!"

    //Of course, we can't use the id directly because it does not exist
at compile time, but

    //The next line, using bracket notation on the id of the canvas
still does not find the instance.

    //is the bracket notation getting evaluated at compile-time, that
would explain it.

    this["canvas1"].addChild(TextAreaNew);

    //The following two comment lines show a method that DOES work 

    //var caTemp:Canvas = Canvas(this.getChildByName("canvas1"));

    //caTemp.addChild(TextAreaNew);

  }//  

So is it possible to assign and use an id for a dynamically instantiated
control instance?  Or is getChildByName the best solution?

Tracy

 

Reply via email to