Glossy Bean
Glossy Bean

Reputation: 60

How can I dispatch event to another class in Action Script 3?

I've searched few docs and I couldn't find about dispatching event to another classes.

I'm trying to make like this.

  1. 'main' class has button.
  2. 'main','sub' class gonna trace "button is clicked" when button is clicked

I can trace that in 'main' class with dispatch event.

but 'sub' class is problem.

how can I dispatch event like that into 'sub' class?

Main class

package com
{
    import flash.events.*;
    import flash.display.MovieClip;
    import com.sub;

    public class main extends MovieClip
    {
        public static const BTN_CLICKED:String = "btn_Clicked";

        public function main():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        public function init(e:Event = null):void
        {
            var flashVars:Object = {};

            removeEventListener(Event.ADDED_TO_STAGE, init);
            if(parent != null && parent.parent != null)
            {
                flashVars = parent. parent.loaderInfo.parameters;
            }
            else
            {
                flashVars = this.root.loaderInfo.parameters;
            }
            //entry point
            var subClass:sub = new sub;
            subClass.init();

            btn.addEventListener(MouseEvent.CLICK, onClick);
            addEventListener(BTN_CLICKED, onbtnClicked, false, 0, true);
        }

        public function onClick(e:MouseEvent)
        {
            dispatchEvent(new Event(BTN_CLICKED));
        }

        public function onbtnClicked(e:Event)
        {
            trace("clicked");
        }
    }
}

Sub Class

package com
{
    import flash.events.*;
    import flash.display.MovieClip;
    import com.main;

    public class sub extends MovieClip
    {
        public function sub():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }

        public function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            //entry point
            trace("sub class loaded");
        }
    }

}

Upvotes: 0

Views: 295

Answers (1)

Vesper
Vesper

Reputation: 18747

You should relocate var subClass:sub to the main set of main class definitions, beside public static const BTN_CLICKED:String = "btn_Clicked";. Then, you can do subClass.dispatchEvent(...).

public class main extends MovieClip {
    private var subClass:sub;
    public function main() {
        ...
        subClass=new sub();
        addChild(subClass); // not just "init()", it's wrong
        ...
    }
    public function onClick(e:MouseEvent)
    {
        dispatchEvent(new Event(BTN_CLICKED));
        subClass.dispatchEvent(new Event(BTN_CLICKED));
    }
}

Upvotes: 1

Related Questions