RE: [flexcoders] Initialization of MXML components

2006-08-08 Thread Gordon Smith












As you've discovered, properties specified
as MXML attributes get set BEFORE the children of a component are created. This
is intentional; in the case that you are creating children by overriding
createChilden(), it allows you create only the appropriate children for a
complex component. For example, imagine a Clock component with a 'mode'
property than can be analog or digital; the two modes
would require different children.



Therefore, the recommend pattern for
implementing a property is for the setter to set a storage variable and a
change flag and then call invalidateProperties(). Latter, in commitProperties(),
which gets called AFTER the children have been created, commit the new property
value into the child and clear the change flag. If you look at the framework
source code, you'll see this pattern used for many properties of UIComponents.



private var _ myProperty:String
= default value;



private var
myPropertyChanged:Boolean = false;



public function
get myProperty ():String

{


return _myProperty;

}



public function
set myProperty(value:String):void

{


_myProperty = value;


myPropertyChanged = true;




invalidateProperties();

}



override
protected function commitProperties():void

{


super.commitProperties();




if (myPropertyChanged)


{


myText.text = _myProperty;


myPropertyChanged = false;


}

}



Another advantage of this approach is that
you can set myProperty many times in a method (for example, in a loop which
builds it up by concatenation), but myText.text will get set only once, when
the LayoutManager calls commitProperties(). This optimizes performance because
setting the text of a TextField is a slow operation; for example, it requires a
multiline TextField to figure out all its line breaks.



- Gordon











From:
flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Lachlan Cotter
Sent: Monday, August 07, 2006 4:43
PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders]
Initialization of MXML components













Hi List,











I have a question about the initialisation rules for MXML components.
My situation is as follows:











I have defined a custom MXML component that extends the Canvas class
(myComponent).











MXML root node of the file, I put a Text element, assigning it an ID
(myText).











I define a setter method on this class (myProperty) that takes a String
argument and passes it to myText.text.











I use the custom component in the application, with a tag like this:











local:MyComponent myProperty=a value /











Sure enough the instance is created and the setter method is called.
However, an error results when I try to access the property of the child Text
object. Apparently it has not been initialised when the method is called. This
results in an error (setting a property on a null object).











My question is if this is the expected behaviour and if there is a way
to achieve this with MXML (setting properties of child objects from a setter
method called at init time).











Thanks for any insights.











Cheers,





Lach




























__._,_.___





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com








   






  
  
SPONSORED LINKS
  
  
  

Web site design development
  
  
Computer software development
  
  
Software design and development
  
  


Macromedia flex
  
  
Software development best practice
  

   
  







  
  
  YAHOO! GROUPS LINKS



  Visit your group "flexcoders" on the web.
  To unsubscribe from this group, send an email to:[EMAIL PROTECTED]
  Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.



  






__,_._,___






[flexcoders] Initialization of MXML components

2006-08-07 Thread Lachlan Cotter


Hi List,I have a question about the initialisation rules for MXML components. My situation is as follows:I have defined a custom MXML component that extends the Canvas class (myComponent).MXML root node of the file, I put a Text element, assigning it an ID (myText).I define a setter method on this class (myProperty) that takes a String argument and passes it to myText.text.I use the custom component in the application, with a tag like this:local:MyComponent myProperty="a value" /Sure enough the instance is created and the setter method is called. However, an error results when I try to access the property of the child Text object. Apparently it has not been initialised when the method is called. This results in an error (setting a property on a null object).My question is if this is the expected behaviour and if there is a way to achieve this with MXML (setting properties of child objects from a setter method called at init time).Thanks for any insights.Cheers,Lach 
__._,_.___





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com








   






  
  
SPONSORED LINKS
  
  
  

Web site design development
  
  
Computer software development
  
  
Software design and development
  
  


Macromedia flex
  
  
Software development best practice
  

   
  







  
  
  YAHOO! GROUPS LINKS



  Visit your group "flexcoders" on the web.
  To unsubscribe from this group, send an email to:[EMAIL PROTECTED]
  Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.



  






__,_._,___


Re: [flexcoders] Initialization of MXML components

2006-08-07 Thread Hilary Bridel



We probably need a little more code to see what is going on, but I'll take a stab in the dark ;-)

Have you tried using creationComplete on the Canvas Class and calling a function from there?
mx:Canvas creationComplete=init() 

private function init():void{
myText.x = 50;
//or what ever...
}

Hilary

www.bridel.org

On 8/8/06, Lachlan Cotter [EMAIL PROTECTED] wrote:



Hi List,

I have a question about the initialisation rules for MXML components. My situation is as follows:

I have defined a custom MXML component that extends the Canvas class (myComponent).

MXML root node of the file, I put a Text element, assigning it an ID (myText).

I define a setter method on this class (myProperty) that takes a String argument and passes it to myText.text.

I use the custom component in the application, with a tag like this:

local:MyComponent myProperty=a value /

Sure enough the instance is created and the setter method is called. However, an error results when I try to access the property of the child Text object. Apparently it has not been initialised when the method is called. This results in an error (setting a property on a null object).


My question is if this is the expected behaviour and if there is a way to achieve this with MXML (setting properties of child objects from a setter method called at init time).

Thanks for any insights.

Cheers,
Lach


 -- Hilary-- 

__._,_.___





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com








   






  
  
SPONSORED LINKS
  
  
  

Web site design development
  
  
Computer software development
  
  
Software design and development
  
  


Macromedia flex
  
  
Software development best practice
  

   
  







  
  
  YAHOO! GROUPS LINKS



  Visit your group "flexcoders" on the web.
  To unsubscribe from this group, send an email to:[EMAIL PROTECTED]
  Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.



  






__,_._,___