문제

어떤 경우에는 구성 요소가 이벤트를받을 수없는 것 같습니다.

편집하다

명확히하기 위해, 예제 코드는 시연을위한 것입니다. 실제로 물어 보았던 것은 청취자가 추가 할 수있는 중심 위치가 있었는지, 임의의 객체를 오가는 이벤트를 안정적으로 파견 할 수있는 중심 위치가 있는지 여부였습니다.

나는 ParentApplication을 사용하여 처리 해야하는 이벤트를 파견하고받습니다.

/편집하다

두 구성 요소가 다른 부모가 있거나 아래의 예에서와 같이, 하나는 팝업 인 경우, 이벤트가 리스너에 도달하지 못하는 것 같습니다 (작동하지 않는 디스패치의 경우 "팝업"방법을 참조하십시오).

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
        layout="absolute" 
        initialize="init()">
<mx:Script>
    <![CDATA[
        import mx.controls.Menu;
        import mx.managers.PopUpManager;

        // Add listeners
        public function init():void
        {
            this.addEventListener("child", handleChild);
            this.addEventListener("stepchild", handleStepchild);
        }

        // Handle the no pop button event
        public function noPop(event:Event):void
        {
            dispatchEvent(new Event("child"));
        }

        // Handle the pop up
        public function popUp(event:Event):void
        {
            var menu:Menu = new Menu();
            var btnMenu:Button = new Button();
            btnMenu.label = "stepchild";
            menu.addChild(btnMenu);
            PopUpManager.addPopUp(menu, this);

            // neither of these work...
            this.callLater(btnMenu.dispatchEvent, [new Event("stepchild", true)]);
            btnMenu.dispatchEvent(new Event("stepchild", true));
        }

        // Event handlers

        public function handleChild(event:Event):void 
        {
            trace("I handled child");
        }

        public function handleStepchild(event:Event):void {
            trace("I handled stepchild");
        }
    ]]>
</mx:Script>

<mx:VBox>
    <mx:Button label="NoPop" id="btnNoPop" click="noPop(event)"/>
    <mx:Button label="PopUp" id="btnPop" click="popUp(event)"/>
</mx:VBox>
</mx:Application>

나는 근로를 생각할 수 있지만 중앙 이벤트 버스가 있어야하는 것 같습니다 ...

내가 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

위의 것이 정확합니다. BTNMenu에서 이벤트를 파견하고 있지만 BTNMenu에서 이벤트를 듣지 않고 있습니다. 응용 프로그램에서 이벤트를 듣고 있습니다.

응용 프로그램에서 발송 :

dispatchEvent(new Event("stepchild", true));

또는 btnmenu에서 듣습니다

btnMenu.addEventListener("stepchild",handleStepChild);
btnMenu.dispatchEvent(new Event("stepchild",true));

다른 팁

당신은 청취자를 첨부하고 있습니다 this 이벤트가 파견 될 때 btnMenu.

이것은 작동해야합니다 :

dispatchEvent(new Event("stepchild", true));

추신. 실제로 불필요한 이유가 없습니다. 'this'범위 문제를 극복하기 위해 명시 적으로 요구되지 않는 한 모든 곳. 이 경우 모든 것을 떠날 수 있습니다 this 밖으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top