2015-11-28 2 views
0

При экспериментировании с основным материалом кодирования я задавался вопросом, можно ли использовать или захватить значение, возвращаемое методом, вызываемым делегатом. Другими словами, где будет возвращать значение?Можно ли использовать значение, возвращаемое методом, вызываемым делегатом?

Например:

class Main extends Sprite 
{ 
    public var mc:MyMc; 

    function Main() 
    { 
     mc.addEventListener("myClick" , myClick); 

    } 

    function myClick(e:Event):String //returning a string 
    { 
    return "What happens to this return value ???" 
    } 


} 



class MyMc extends MovieClip 
{ 

    function MyMc() 
    { 
     addEventListener(MouseEvent.CLICK , onClick); 

    } 

    function onClick(e:Event):String //returning a string 
    { 
    dispatchEvent(new Event("myClick")); 
    } 


} 

ответ

0

Как я знаю, что это невозможно сделать, но есть, по крайней мере, некоторые способы реализации логики подобное тому, что вы сказали о.

Например, вы можете вызвать метод диспетчера, от метода слушателя:

class Main extends Sprite 
{ 
    public var mc:MyMc; 

    function Main() 
    { 
     mc.addEventListener("myClick" , myClick); 
    } 

    function myClick(e:Event):void 
    { 
     mc.specialMethod("some string"); 
    } 
} 

class MyMc extends MovieClip 
{ 
    function MyMc() 
    { 
     addEventListener(MouseEvent.CLICK , onClick); 
    } 

    function onClick(e:Event):void 
    { 
     dispatchEvent(new Event("myClick")); 
    } 

    public function specialMethod(param:String):void 
    { 
     // Do something to the param 
    } 
} 

Кроме того, вы можете думать о диспетчеризации события из основного класса, и слушать его в классе MyMc , или передать обратный вызов, который возвращает строку, от Main до MyMc.

0

Это в соответствии с вами и вашими потребностями, чтобы вернуть что-то из функции слушателя, потому что обычно it must return nothing:

... Эта функция должна принимать объект Event в качестве единственного параметра и не должна возвращать ничего, ...

, но вы, конечно, можете получить возвращаемое значение (ы), посмотрите на этот небольшой пример:

var light_on:Boolean = false; 

btn_light_on.addEventListener(MouseEvent.CLICK, btn_on_onPress); 
btn_light_off.addEventListener(MouseEvent.CLICK, btn_off_onPress); 

function btn_on_onPress(e:MouseEvent): Boolean { 
    light_on = true; 
    if(e.target === btn_light_off){ 
     light_on = false;  
    } 
    return light_on; 
} 

function btn_off_onPress(e:MouseEvent): void { 
    trace('The light is', btn_on_onPress(e) ? 'on' : 'off'); 
} 

Надеюсь, что может помочь.

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