PureMVC Architects Lounge

PureMVC Manifold => MultiCore Version => Topic started by: ghess on May 13, 2008, 02:16:17



Title: How to register dynamic components (Popups)
Post by: ghess on May 13, 2008, 02:16:17
Hi Folks,

New to ActionScript, puremvc so please bare with me.

In registering my Mediators I need reference to the UIComponent for the constructor. I have a Footer component that has a few links; About, Terms of Use, Privacy policy ect... My Footer has a mediator to listen to the link clicks dispatched and perform the associated action such as display a TitleWindow as a pop up. My About component has some other links allowing the user to navigate to the EULA, and some external url's so I felt it was just to have an AboutMediator to listen to the components dispatched events and decouple the About window functionality from the footer. My StartupCommand responsible for registering the mediators does not have the ability get a reference to the About component by drilling down through parentComp.footer.aboutWin because it is only instantiated at runtime. I tried to just have a member variable in the Footer.mxml component instantiated to an instance of the About.mxml component so I can reference it when registering the AboutMediator. When I run the application I get the following error:

Error: multitonKey for this Notifier not yet initialized!
   at org.puremvc.as3.multicore.patterns.observer::Notifier/get facade()[C:\Documents and Settings\Owner\My Documents\workspaces\PureMVC\PureMVC_AS3_MultiCore\src\org\puremvc\as3\multicore\patterns\observer\Notifier.as:89]
   at com.corp.prod.common.view::AboutMediator()[C:\dev\eclipse\workspaces\corp\proj\src\com\axentra\hipserv\common\view\AboutMediator.as:25]
   at com.corp.prod.modules.landingPage.controller::StartupCommand/execute()[C:\dev\eclipse\workspaces\copr\proj\src\com\corp\prod\modules\landingPage\controller\StartupCommand.as:43]

I am using the multicore version as I am employing a modular design, hoping my issue is not related, if so I can provide more info.

Any help much appreciated.

-Greg


Title: Re: How to register dynamic components (Popups)
Post by: puremvc on May 13, 2008, 05:58:26
Your problem in this case is you're trying to access the Facade in the the Mediator constructor, which is not possible in MultiCore. You must wait until initializeNotifier before the facade is available.

See this post: http://forums.puremvc.org/index.php?topic=313.msg1213#msg1213

-=Cliff>


Title: Re: How to register dynamic components (Popups)
Post by: ghess on May 14, 2008, 10:19:23
Thanks Cliff, much appreciated, I missed that. Working now :-).

As far as my About.mxml and associated Mediator I chose to have a public member variable initialized in the parent component (Footer.mxml) so that I can register the Mediator in my StartupCommand by accessing footer.aboutWin to construct and register the AboutMediator. This seems ok for this module, however some of my more complex modules this would get quite ugly (drilling down several components deep) to access the UIComponent to build the Mediators. Should I be having my components register themselves? What is best practice, maybe my component design is overkill, but I like the reuse and encapsulation?

Cheers,

Greg


Title: Re: How to register dynamic components (Popups)
Post by: puremvc on May 14, 2008, 03:25:29
You can have the mediator of a given view component create and register the mediators for the view components that are direct children of that view component.

Apply this methodology along the display hierarchy such that no mediator or command ever has to drill more than one level - accessing only a property name of the component in hand to get the new component to be mediated.

-=Cliff>


Title: Re: How to register dynamic components (Popups)
Post by: ghess on May 15, 2008, 01:42:23
Excellent, thank you.

-Greg