Snote
Snote

Reputation: 955

Listen custom event

I have a button when I click on it, a popoup show and ask to confirm. When it confirm, I dispatch and custom event. But in the application I can't listen to the event?? Someone can help me?

Also it's an mobile application.

First view

<fx:Script>
    <![CDATA[
        import events.ConfirmDeleteEvent;

        import mx.managers.PopUpManager;

        private var _confirmDeletePopup:ConfirmDeletePopup;

        protected function confirm(event:MouseEvent):void
        {
                this.addEventListener(ConfirmDeleteEvent.YES, deleteConfirm);
                this.addEventListener(ConfirmDeleteEvent.NO, deleteNotConfirm);

                _confirmDeletePopup = new ConfirmDeletePopup();

                PopUpManager.addPopUp(_confirmDeletePopup, this, true);
                PopUpManager.centerPopUp(_confirmDeletePopup);
        }

        protected function deleteConfirm():void
        {
            trace("delete confirm");
            lbl.text = "Delete";
            PopUpManager.removePopUp(_confirmDeletePopup);
        }

        protected function deleteNotConfirm():void
        {
            trace("delete not confirm");
            lbl.text = "Don't delete";
            PopUpManager.removePopUp(_confirmDeletePopup);
        }
    ]]>
</fx:Script>

<s:Button width="100%" label="Delete" click="confirm(event)"/>
<s:Label id="lbl" width="100%" fontSize="36" text="What to do?" textAlign="center"/>

Component use in PopopUp

<fx:Script>
    <![CDATA[
        import events.ConfirmDeleteEvent;

        import mx.managers.PopUpManager;

        protected function click(type:String):void
        {
            var confirmDeleteEvent:ConfirmDeleteEvent = new ConfirmDeleteEvent(type);
            var result:Boolean = dispatchEvent(confirmDeleteEvent);
            trace("Event dispatch : " + result);
        }

    ]]>
</fx:Script>
<s:VGroup paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8" width="100%">
    <s:Label width="100%" maxDisplayedLines="5"
             text="Delete?"
             textAlign="center"/>
    <s:HGroup width="100%">
        <s:Button id="yesButton" width="50%" label="Yes" click="click(ConfirmDeleteEvent.YES)"/>
        <s:Button id="noButton" width="50%" label="No" click="click(ConfirmDeleteEvent.NO)"/>
    </s:HGroup>
</s:VGroup>

My event package events { import flash.events.Event;

public class ConfirmDeleteEvent extends Event
{
    public static var YES:String = "yes";
    public static var NO:String = "no";

    public function ConfirmDeleteEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
    }

    override public function clone():Event
    {
        return new ConfirmDeleteEvent(type, bubbles, cancelable);
    }
}

}

Thank you

Upvotes: 0

Views: 546

Answers (1)

David Goshadze
David Goshadze

Reputation: 1437

Add event listener to your _confirmDeletePopup component, not the calling component. Like this:

protected function confirm(event:MouseEvent):void
        {
                _confirmDeletePopup = new ConfirmDeletePopup();

                _confirmDeletePopup.addEventListener(ConfirmDeleteEvent.YES, deleteConfirm);
                _confirmDeletePopup.addEventListener(ConfirmDeleteEvent.NO, deleteNotConfirm);

                PopUpManager.addPopUp(_confirmDeletePopup, this, true);
                PopUpManager.centerPopUp(_confirmDeletePopup);
        }

Upvotes: 1

Related Questions