On the whole, one of the aspects I like most about Flex is that it generally works the way you expect it to. That being said there are definitely certain things which don’t quite work as expected.
This is actually what inspired me to write this post. I’m a fan of rounded rectangles (add a vertical gradient and a drop shadow and you’ve got a classic Web 2.0 look). I’d expect this to do the trick.
<mx:Box backgroundColor="#888888" cornerRadius="8"/>
However, to make it work you need to set the borderStyle property
<mx:Box backgroundColor="#888888" cornerRadius="8" borderStyle="solid"/>
A similar example is when trying to show a hand cursor. I’d expect this to work.
<mx:Label text="test" useHandCursor="true"/>
However, you need to use the following
<mx:Label text="test" useHandCursor="true" buttonMode="true" mouseChildren="false"/>
This is more of a Firefox bug, however if you rely on the browser to handle caching the SWF (and updating when a new SWF is created) you’ll run into problems in Firefox. The best solution I’ve found so far is to convert the html wrapper file into a PHP script (any scripting language should do). You can then add the following to the SWF name.
?checksum=<? echo md5_file("__SWF_file_name__") ?>
I’ve written about this before but it’s caused me enough trouble that it’s worth repeating. If there are null errors inside of a function used in binding the Flash player will swallow them. It needs to do that as binding expression will often have null errors (ie, if you bind to person.name and person isn’t yet set). However, this can be very confusing.
A really useful function is ObjectUtil.copy(), it will make a deep copy of your object. However, in order to use it you need to first register any classes which your object is composed of. Here’s the code I use.
for each (var classRef:Class in [ Class1, Class2, etc... ])
var className:String = getQualifiedClassName( new classRef()) ;
registerClassAlias( className, classRef );