通过url将param传递给flex模块

时间:2011-02-05 13:04:29

标签: flex url module loaderinfo

我在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实际传递了什么=字符串。我究竟做错了什么?

2 个答案:

答案 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方法从未正常工作(对我而言)。