I'm subclassing FormItem to have the whole form item (its properties
and its child controls) driven by a single piece of data I specify in
a property I've added to my derived FormItem.

In my custom property's setter, I store the custom data and call
"invalidateProperties". I then do this:

override protected function commitProperties():void
{
  super.commitProperties();

  if (myCustomData)
  {
    label = myCustomData.someCustomString;
  }
}

The problem is that the FormItem doesn't display correctly... the
label gets truncated to zero width because its not getting re-measured
when I set the label.

After some debugging, I found that the problem is that when I set the
label property, it internally calls invalidateProperties, which sets a
flag to "true" indicating that properties are invalid and need to be
validated at the next opportunity. Unfortunately, since I'm inside of
the commitProperties method I'm in the middle of a validation. At the
end of that validation, the "properties are invalid" flag gets reset,
with the result being that any calls to invalidateProperties *during*
commitProperties are *ignored*! Yikes!

How do I work around this? I could do a
callLater(invalidateProperties), but then code later during the same
frame that calls validateNow() on my form (which is necessary for some
effects/measuring I'm doing) wouldn't work because callLater won't
happen until the *next* frame.

Perhaps the validation code should reset the validate flag *before*
calling commit properties, so that any invalidations during
commitProperties are properly recorded?

Troy.


Reply via email to