dejjub-AIS
dejjub-AIS

Reputation: 1541

flex 4 - why dispatchEvent triggering creationComplete recursively

I have a custom component called shopView which is an MXML skinnable component. I have a controller class called ShopController which takes care of showing this component in popup, updating info shown in the component etc.

Now, I wanted to maniupate some of the subcomponents of this ShopView after it has been created from the controller after the ShopView is created (creationComplete() event)

So, I have attached an event listener which intern does some initialization process

   creationComplete="init(event)" 

the init() function

        private function init(event:FlexEvent):void{
            event.stopImmediatePropagation();
            initMenus();
            initSlots();
            dispatchEvent(event);
        }

Attached another creation complete event from the controller class

     _shop.addEventListener(FlexEvent.CREATION_COMPLETE,onShopCreated);

*_shop is the instance of ShopView*

Now, if you see the init() function, there I am stopping the event propagation, doing some initialization process and after that I am dispatching the event (for the shop controller do the rest of the job)

Now, this is crashing the app because the crationComplete event of the ShopView is recursively called. I was thinking the dispatchEvent will propagate to the other listerners but seems like it is propagating back to the same component.

I have fixed it by removing the e.stopImmediatePropagation() and dispatchEvent(event) lines from the init() function. But I want to know why it is happening like this?

Is it a known issue for the mxml/flex components? OR it is expected behavior?

Update: I am not doing same in .as as I said below. Got answer, basically its my stupidity :)

because I have not seen this behavior when I write .as classes where I stopevent propagation and dispatch the event based on business logic.

Thanks in advance.

Upvotes: 2

Views: 956

Answers (1)

takteek
takteek

Reputation: 7110

This is expected behavior.

When you redispatch an existing event dispatchEvent automatically clones it (since you can't dispatch the same event twice.) This clears any propagation-related flags.

May I ask why you want to redispatch CREATION_COMPLETE in this situation anyway? Both handlers will function just fine without the two lines you removed.

Upvotes: 3

Related Questions