I have a Flex project with an SWF object embedded with SWFLoader:
<mx:SWFLoader id="mySWFLoader" source="@Embed('Plant_Walking.swf')" creationComplete="onComplete()" />
The onComplete() function is embedded in the mxml file:
<fx:Script>
<![CDATA[
public function onComplete() : void {
mySWFLoader.content.addEventListener( "featureSelected" , handleEvent );
}
public function handleEvent( evt:Event ):void
{
var selectedInfo : String = mySWFLoader.content['itemname'];
textinput.text = selectedInfo;
label.text = selectedInfo;
}
]]>
</fx:Script>
Inside this SWF object, written in AS3, when I click an object happens this:
itemname=ev.object.name;
dispatchEvent(new Event("featureSelected", true));
It call the event featureSelected and then it will call the handleEvent function. The problem is that I don't receive the value of the itemname parameter and, even though the parameter is declared in the SWF object:
public var itemname:String = "test";
I receive this error at runtime:
[Fault] exception, information=ReferenceError: Error #1069: Property itemname not found on Main__embed_mxml_Plant_Walking_swf_1661400095 and there is no default value.
Why? Thank you
Write following in your code. It will give the value.
var selectedInfo : String = evt.itemname;
Instead of:
var selectedInfo : String = mySWFLoader.content['itemname'];
Edit:
If above not work then, create custom event like:
public class FeatureSelectedEvent extends Event
{
public static var FEATURE_SELECTED:String = "featureSelected";
private var _itemname:String;
public function get itemname():String { return _itemname }
public function FeatureSelectedEvent (type:String, itemname:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type,bubbles,cancelable);
_itemname = itemname;
}
override public function clone():Event
{
return new FeatureSelectedEvent(type, itemname, bubbles, cancelable);
}
}
Then dispatch event like:
dispatchEvent(new FeatureSelectedEvent(FeatureSelectedEvent.FEATURE_SELECTED, ev.object.name));
You get parameter value like:
public function handleEvent( evt:Event ):void
{
var selectedInfo : String = event.itemname;
}
Sorry, for any spelling mistake.