Troubleshooting
77
I get an error "xxx is not a valid attribute ..." when I try to use the component from MXML.
Ensure that the attribute is spelled correctly and is marked as
Inspectable
in the metadata. The
metadata syntax is not checked, so ensure that there are no misspellings or syntax errors. Also be
sure that it is not private.
For more information, see
“Inspectable” on page 63
.
I don't get any errors, but nothing shows up.
Verify that the component was instantiated. One way to do this is to put a Button control and a
TextArea control in the MXML application and set the
.text
property to the ID for the
component when the button is clicked.
<!-- This verifies whether a component was instantiated. -->
<zz:mycomponent id="foo" xmlns:zz="zz.custom.mycomponents" />
<mx:TextArea id="output" />
<mx:Button label="Print Output" click="output.text = foo" />
I tried the verification test and I got nothing or "undefined" in the output.
This means that one of your dependent classes was either not loaded or was loaded too late. Print
various classes to the output to see whether they are being created. Any components created with
the
createClassObject()
method as subcomponents of your component must be placed in
your component symbol.
For more information, see
“Adding dependent components” on page 15
.
A good practice is to create a hidden frame and place components on that frame. Then put a
stop()
action in the preceding frame, so the hidden frame never gets played. As an example, the
ModalText symbol has a layer called assets and the
stop()
action on the main layer.
The component is instantiated properly but does not show up (#1)
In some cases, helper classes are not ready by the time your component requires them. Flex adds
classes to the application in the order that they need to be initialized (base classes, and then child
classes). However, if you have a static method that gets called as part of the initialization of a class,
and that static method has class dependencies, Flex does not know to place that dependent class
before the other class because it does not know when that method is going to be called.
One possible remedy is to add a static variable dependency to the class definition. Flex knows that
all static variable dependencies must be ready before the class is initialized, so it orders the class
loading correctly.
The following example adds a static variable to tell the linker that class A must be initialized
before class B:
class mx.example.A {
static function foo():Number
{
return 5;
}
}
class mx.example.B
{