1

我在 Flex 应用程序中重复使用几个模块,并通过“loaderInfo.url”var 传入参数来改变条件。这适用于给定模块的第一次迭代,但后续尝试将始终看到与第一次创建相同的参数,无论实际使用什么。

创建模块时是否有某种方法可以重置此值?

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' 处理程序(例如'trace(this.loaderInfo.url);')中查看参数时,每次(对于给定的模块)都是相同的,而不管通过?param=string 实际传递了什么。我究竟做错了什么?

4

2 回答 2

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

使用该配置再次对其进行测试,并在情况发生变化时报告。

于 2011-02-06T15:10:21.377 回答
0

好吧,我不知道为什么这样做。但是..将唯一参数传递给模块的不同实例的有效方法是使用 IModuleInfo.data 参数。url 方法从来没有正常工作(对我来说)。

于 2011-02-06T05:26:59.217 回答