Hi Alex, hi Rob,
thanks both for your replies.
Rob I 've tried your suggestion but it didn't help.. So after visiting Alex's
blog, doing some more reading and further invastigation (debugging) of my
problem, I have come now to the following:
- Alex is right about the Singletons. I traced the exact step where the app
throws that error as in the following code from HistoryManager.as:
private static function get impl():IHistoryManager
{
if (!_impl)
{
_impl = IHistoryManager(
Singleton.getInstance("mx.managers::IHistoryManager"));
}
return _impl;
}
Now as I described in the first place, I was unloading/loading modules by the
standard procedure (and I had the problem). Running the loop as desribed
initially, when the flow reaches the line if (!_impl), the condition calculates
true and goes in to update _impl, and so throws the error (the second time it
runs).
If instead I don't unload "module1a" the first time client (role=Customer) is
logged out and then he runs again this option that loads again module1a, the if
(!_impl) condition, comes false, jumps to return _impl; line, and all goes well
- no error thrown..
This proves the point Alex said, but now I wonder what good is there to have a
module loaded all the time just in case the client decides to run this option
again.. before actually closing his browser.. I believe this defeats the
purpose and I rather have to consider re-writting that "module1a" in a totally
different style.
I hope this is clear enough.. What is your advise ?
Thank you again for helping me gaining insight in this esoteric problem..
George
--- In [email protected], "rob_mcmichael" <rob_mcmich...@...> wrote:
>
> --- In [email protected], Alex Harui <aharui@> wrote:
> >
> > See the modules presentation on my blog. That's the shared-code problem.
> > Singletons need to be in the main app or a shared-code module.
> >
> > Alex Harui
> > Flex SDK Developer
> > Adobe Systems Inc.<http://www.adobe.com/>
> > Blog: http://blogs.adobe.com/aharui
> >
> > From: [email protected] [mailto:[email protected]] On
> > Behalf Of grg_blls
> > Sent: Wednesday, March 18, 2009 4:37 AM
> > To: [email protected]
> > Subject: [flexcoders] A ModuleLoader issue
> >
> >
> > Hi all,
> >
> > I have the following problem with my current development. A client is
> > loging in the system either as customer or admin and accordingly the main
> > application through module manager loads either "module1" or "module2".
> > If a client is logged as customer (i.e. "module1" is loaded), he is offered
> > a number of choices, leading to loading one of "module1a", "module1b", etc.
> >
> > In every case the procedure is a unload previous/load next module through:
> >
> > public function createModule(m:ModuleLoader, s:String):void{
> > m.url = s;
> > m.loadModule();
> > }
> >
> > public function removeModule(m:ModuleLoader):void {
> > m.unloadModule();
> > }
> >
> > Finally that client is logged out when finished.
> >
> > Now if he does a new login as a customer, "module1" loads and offers again
> > the customers options, but if he tries the same option (which leads to
> > loading "module1a"), an error is thrown, with the following message from
> > the Flash Player:
> >
> > An ActionScript error has occured
> > TypeError: Error #1034: Type Coercion failed: cannot convert
> > mx.managers::historymanageri...@683d219 to mx.managers.IHistoryManager.
> > at mx.managers::HistoryManager$/get
> > impl()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\HistoryManager.as:96]
> > at
> > mx.managers::HistoryManager$/register()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\HistoryManager.as:134]
> > at
> > mx.containers::ViewStack/commitProperties()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\containers\ViewStack.as:649]
> > at
> > mx.containers::TabNavigator/commitProperties()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\containers\TabNavigator.as:504]
> > at
> > mx.core::UIComponent/validateProperties()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:5670]
> > at
> > mx.managers::LayoutManager/validateProperties()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:519]
> > at
> > mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:639]
> > at Function/http://adobe.com/AS3/2006/builtin::apply()
> > at
> > mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8460]
> > at
> > mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8403]
> >
> > Any ideas, as to the nature of it and where to look fixing?
> > Thanks all in advance
> >
> > George
> >
>
> Try putting this at the start of your module:
> historyManagementEnabled = false;
>
> It worked for me, but that was with a sub application (may be the same thing).
>
> Rob
>