我在Flex应用程序中重复使用一些模块,并通过'loaderInfo.url'var传入params来改变条件。这适用于给定模块的第一次迭代,但后续尝试将始终看到与第一次创建相同的参数,而不管实际使用的是什么。
创建模块时是否有某种方法可以重置此值?
private var moduleInfo : IModuleInfo;
private function loadPageModule( pathString : String, pageParam : String ) : void
{
pathString = "modules/" + pathString + ".swf?param=" + pageParam;
moduleInfo = ModuleManager.getModule( pathString );
moduleInfo.addEventListener( ModuleEvent.READY, onPageModuleReady, false, 0, true);
moduleInfo.load( ApplicationDomain.currentDomain, null, null );
}
当我在'CreationComplete'处理程序中查看param时(例如'trace(this.loaderInfo.url);'),每次(对于给定的模块)它都是相同的,无论通过?param实际传递了什么=字符串。我究竟做错了什么?
答案 0 :(得分:1)
我对你的代码感到困惑。 “moduleInfo”是loadPageModule中的局部变量,意味着在函数执行后它应该被垃圾收集。通常,添加事件侦听器会阻止对象进行GC操作,但是您特意将addEventListener的“weakListener”参数设置为true。
您可以将addEventListener的weakListener参数设置为false并手动删除onPageModuleReady中的侦听器吗?如下所示:
// change true to false on this line
moduleInfo.addEventListener( ModuleEvent.READY, onPageModuleReady, false, 0, false);
// tweak onPageModuleReady
private function onPageModuleReady(e:Event):void {
e.target.removeEventListener(ModuleEvent.READY, onPageModuleReady);
// that will allow the object to be GC'ed
...rest of your code
使用该配置再次测试,并在事情发生变化时报告。
答案 1 :(得分:0)
嗯,我不知道为什么这样做...但是......将唯一参数传递给模块的不同实例的有效方法是使用IModuleInfo.data参数。 url方法从未正常工作(对我而言)。