Aaron B. Russell
Aaron B. Russell

Reputation: 2455

How do I access the root element of an MXML document if I can't set an id?

If I wanted to do something like this:

<mx:Canvas  xmlns:mx="http://www.adobe.com/2006/mxml" 
            horizontalScrollPolicy="off" 
            verticalScrollPolicy="off"  
            xmlns:view="com.foo.bar.view.*" 
>
    <mx:Script>
      <![CDATA[
        myWidth = 100;
        myHeight = 200;
        myCanvas.width = myWidth;
        myCanvas.height = myHeight;
      ]]>
    </mx:Script>
</mx:Canvas>

How would I get a handle on myCanvas (where I'd want myCanvas to be the root )?

Upvotes: 0

Views: 1369

Answers (2)

rlovtang
rlovtang

Reputation: 5060

You don't need to if you make myWidth and myHeight bindable, and set width="{myWidth}" and height="{myHeight}" in the Canvas declaration.

<mx:Canvas  xmlns:mx="http://www.adobe.com/2006/mxml" 
        horizontalScrollPolicy="off" 
        verticalScrollPolicy="off"  
        width="{myWidth}"
        height="{myHeight}"
        xmlns:view="com.foo.bar.view.*" >
  <mx:Script>
  <![CDATA[
     [Bindable]
     private var myWidth:Number;
     [Bindable]
     private var myHeight:Number;
  ]]>
  </mx:Script>
</mx:Canvas>

Any changes to myWidth and myHeight would then update the size of the Canvas

Upvotes: 1

Amarghosh
Amarghosh

Reputation: 59451

To access the component specified by the root node from within an mxml file, you can use this keyword. Any code inside an mxml runs in the context of this object - you can as well omit the keyword if you don't have any local variable by the same name.

this.width = myWidth;
this.height = myHeight;

For your second question:

Let's say your mxml file's name is MyCanvas.mxml. You'd add this to another component using <ns:MyCanvas/> tag. You can set an id there and access it using that.

<ns:MyCanvas id="myCanvas"/>

Inside script:

myCanvas.width = whatever;

Upvotes: 3

Related Questions