2015-01-22 10 views
0

У меня есть проект Flex с SWF-объекта с встроенной SWFLoader:передачи данных между встроенным SWF и Flex

<mx:SWFLoader id="mySWFLoader" source="@Embed('Plant_Walking.swf')" creationComplete="onComplete()" /> 

Функция OnComplete() вложено в файл MXML:

<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 этот SWF объект, написанный в AS3, когда я нажимаю объект происходит следующим образом:

itemname=ev.object.name; 
dispatchEvent(new Event("featureSelected", true)); 

это называют событие featureSelected, а затем он назовет handleEvent функция. Проблема заключается в том, что я не получаю значение параметра ItemName и, даже если параметр объявлен в SWF-объекта:

public var itemname:String = "test"; 

я получаю эту ошибку во время выполнения:

[Fault] exception, information=ReferenceError: Error #1069: Property itemname not found on Main__embed_mxml_Plant_Walking_swf_1661400095 and there is no default value.

Почему? Спасибо

ответ

0

Напишите свой код в своем коде. Это придаст значение.

var selectedInfo : String = evt.itemname; 

Вместо:

var selectedInfo : String = mySWFLoader.content['itemname']; 

Edit:

Если выше не работает, то, создавать собственные события, как:

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); 
    } 
} 

Тогда отправка события, как:

dispatchEvent(new FeatureSelectedEvent(FeatureSelectedEvent.FEATURE_SELECTED, ev.object.name)); 

Вы получаете значение параметра, как:

public function handleEvent(evt:Event):void 
{ 
    var selectedInfo : String = event.itemname; 
} 

К сожалению, для любой орфографической ошибки.

+0

Это не работает, я riceive это сообщение об ошибке: «Ошибка: Доступ в возможно неопределенное свойство ITEMNAME через ссылку со статическим типом flash.events:Event « –

+0

Я отредактировал свой ответ. Попробуй это. – ketan

0

Я, наконец, нашел решение своего ответа. Изменить код функции handleEvent таким образом:

public function handleEvent(evt:Event):void 
     { 
      var selectedInfo:String = ((mySWFLoader.content as MovieClip).getChildAt(0) as Loader).content["itemname"] 
      textinput.text = selectedInfo; 
      label.text = selectedInfo; 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^