2013-11-28 3 views
0

У меня есть файл ActionScript в моем проекте flex. Я загрузил в ActionScript прогибается через addElement()Функция родительского вызова Flex Actionscript

MXML файла:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="init(event)"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 
     public var sv:Myastest; 
     protected function init(event:FlexEvent):void 
     { 
      sv = new Myastest(); 
      addElement(sv); 
      sv.classfunc(); 
     } 

     public function mainfunc():void 
     { 
      trace("mainfunc called"); 
     } 
    ]]> 
</fx:Script> 

</s:WindowedApplication> 

ActionScript файла:

package 
{ 
import flash.events.Event; 

import mx.core.UIComponent; 

[SWF(frameRate="25", backgroundColor="#000000")] 
public class Myastest extends UIComponent 
{ 

    public function Myastest() 
    { 
     trace("loaded.."); 
     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

    private function onAddedToStage(event:Event):void 
    { 
     trace("added to stage"); 
    } 

    public function classfunc():void 
    { 
     trace("classfunc called"); 
    } 

} 
} 

Как я могу позвонить mainfunc() из файла Actionscript? Спасибо.

+3

Вы не должны: это разрушение инкапсуляции. Вы должны использовать события для связи от дочернего компонента к своим предкам. – RIAstar

ответ

0

В CLASSMANAGEREVENT

public class ManagerEvent 
{ 

public static const EVENT_MAIN_CLASS_FUNC:String = UIDUtil.createUID(); 
FlexGlobals.topLevelApplication.addEventListener(EVENT_MAIN_CLASS_FUNC, executeMainClassFuncCommand) 

    public function executeMainClassFuncCommand(event:MainClassFunc):void 
     { 
      var cmd:FUNCTIONCommand = new FUNCTCommand(); 
      cmd.execute(event); 
     } 

} 

класс событий

public class MainClassFunc extends Event 
    { 
     public function MainClassFunc() 
     { 
      super(ManagerEvent.EVENT_MAIN_CLASS_FUNC); 
     } 
    } 

в дочернем

var mainClassFunc:MainClassFunc = new MainClassFunc(); 
FlexGlobals.topLevelApplication.dispatchEvent(mainClassFunc); 
0

ехр и комментарий RIAStar, вы можете сделать это:

MXML Файл:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx"  applicationComplete="init(event)"> 
<fx:Script> 
<![CDATA[ 
    import mx.events.FlexEvent; 
    public var sv:Myastest; 
    protected function init(event:FlexEvent):void 
    { 
     sv = new Myastest(); 
     sv.addEventListener(Myastest.EVENT_NAME, mainfunc); 
     addElement(sv); 
     sv.classfunc(); 
    } 

    public function mainfunc(e:Event):void 
    { 
     trace("mainfunc called"); 
    } 
]]> 
</fx:Script> 

</s:WindowedApplication> 

ActionScript Файл:

package 
{ 
import flash.events.Event; 
import mx.core.UIComponent; 

[SWF(frameRate="25", backgroundColor="#000000")] 
public class Myastest extends UIComponent 
{ 
    public static const EVENT_NAME:String = "EVENT_NAME"; 
    public function Myastest() 
    { 
     trace("loaded.."); 
     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

    private function onAddedToStage(event:Event):void 
    { 
     trace("added to stage"); 
    } 

    public function classfunc():void 
    { 
     trace("classfunc called"); 
     //assuming you want the mainfunc to get called from here 
     dispatchEvent(new Event(EVENT_NAME)); 
    } 

} 
} 

Пожалуйста, обратите внимание, что вам нужно позвонить removeEventListener, прежде чем установить св = нуль.

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