Hello Gordon,

This was very helpful, I was seeing what you described below but had
no idea what was going on.  Thanks for giving me context, it all makes
sense now.  I appreciate the clear explanation.  Thanks.

be well,
Hoyt


--- In [email protected], "Gordon Smith" <[EMAIL PROTECTED]> wrote:
>
> The 'id' property does magic at compile time. When you write
> 
>  
> 
>     <mx:Button id="b"/>
> 
>  
> 
> the MXML compiler autogenerates a reference var inside the class
> declaration for the component you're defining
> 
>  
> 
>     public var b:Button;
> 
>  
> 
> (This var gets initialized by framework code based on the "component
> descriptors" that were autogenerated to describe your MXML tags as
> ActionScript data structures.)
> 
>  
> 
> These reference vars are what allow you to write code like
> 
>  
> 
>     b.label = "OK";
> 
>  
> 
> in your component's <Script> or in any event handler attributes in the
> tags in your component. In other words, they allow you to "access" that
> Button instance no matter how deeply it might be nested inside a
> container hierarchy inside your component.
> 
>  
> 
> Because the 'id' property works at compile time, it doesn't really
> accomplish anything to set it at runtime. It's too late to create a
> reference var in the class, because component classes are typically
> non-dynamic and can't have properties or methods added to them at
> runtime.
> 
>  
> 
> The 'name' property has no compile-time magic.
> 
>  
> 
> If you specify the 'id' property at compile time, the 'name' property
> will get set to the id. Otherwise, the 'name' property will get set to
> an autogenerated string which ensures that every component has a unique
> name.
> 
>  
> 
> Some components also set the 'name' property on some of their internal
> DisplayObject.
> 
>  
> 
> When you call toString() on a component -- and note that it gets called
> implicitly when you coerce it to a String with code like
> trace(myComponent) -- you get a String formed from the 'name' property
> of the component and all of its ancestors. Some code in the framework
> assumes that this string uniquely identifies the component.
> 
>  
> 
> So, in general...
> 
>  
> 
> 1. There's no point in setting 'id' because it doesn't do anything
> interesting at runtime.
> 
>  
> 
> 2. You shouldn't set 'name' because the framework uses it for its own
> purposes.
> 
>  
> 
> Most of the time when developers think they need to set either 'id' or
> 'name', they're going about something in the wrong way. In particular,
> if you're creating component instances dynamically, you DON'T want to
> set their 'id' or 'name'... you want to declare individual reference
> vars (or an Array or Dictionary or whatever) to keep track of them, so
> that you can access them with the same kind of code that you use to
> access instances declared at compile time.
> 
>  
> 
> Gordon Smith
> 
> Adobe Flex SDK Team
> 
>  
> 
> ________________________________
> 
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of hoytlee2000
> Sent: Wednesday, April 23, 2008 12:12 AM
> To: [email protected]
> Subject: [flexcoders] what's the difference between the name prop. and
> the id prop for a UI component?
> 
>  
> 
> When should I use one over the other? Are there any differences?
> 
> Can I set a dynamically created UIComponent's id with the id property
> like this:
> 
> UIObject.id = "my_id";
> 
> and then call that component using the id?
> 
> Thanks,
> Hoyt
>


Reply via email to