And watch out if you're measuring multi-line text controls. See past threads for how to hook that up.
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Amy Sent: Tuesday, September 16, 2008 10:01 AM To: [email protected] Subject: [flexcoders] Re: VBox as itemRenderer & recycling issue? --- In [email protected]<mailto:flexcoders%40yahoogroups.com>, "Richard Baker" <[EMAIL PROTECTED]> wrote: > > Hi > > I have a DataGrid with 1 column - which is a custom itemRenderer. > That's built from an MXML component file containing a VBox and 3 text > boxes stacked vertically (obviously!). Each line should be displayed > without scrollbars - variableRowHeight is set to true on the datagrid. > > Problem is, each line's height seems to be set to a seemingly random > value. Sometimes it works, sometimes not. I think its to do with > itemRenderer recycling, so I am trying to explicitly set the VBox > height with a dataChange event handler: > > private function onDataChange():void > { > txtQuestion.validateNow(); > txtOption.validateNow(); > txtFeedback.validateNow(); > this.height= txtQuestion.textHeight+txtOption.textHeight+ > txtFeedback.textHeight; > trace ("ondatachange :" + txtQuestion.text + this.height); > } > > the heights of the text fields (txtQuestion etc) don't seem to be > right so I am calling the validateNow to try to get the correct value, > but it's not happening for me? > > Where am I going wrong? > There may be some race conditions going on regarding properties and dimensions, so you might want to override measure() to ensure that you properly report the measuredHeight and measuredWidth to the container. This would also allow you to avoid calling validateNow() so many times, which is an expensive operation, as I understand it. Since you're already using a heavy component to extend, you probably want to optimize your performance as much as possible. Since you don't want scrollbars, you might want to use UIComponent and just size and position your child components in updateDisplayList. HTH; Amy

