【问题标题】:Passing param to flex module via url通过 url 将参数传递给 flex 模块
【发布时间】:2011-02-05 13:04:28
【问题描述】:

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

有没有办法在创建模块时重置这个值?

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

【问题讨论】:

  • 在我们发言时我遇到了这个问题。我在应用程序中多次加载模块,并通过查询字符串传递数据。它在模块第一次加载时工作,但之后每次的数据都是一样的。
  • 所以您重复加载相同的模块但每次发送不同的 URL 参数? (想了解您的问题)
  • 没错。 URL 参数提供了一些关于模块应该如何操作的信息。我尝试显式调用 removeEventListener(ModuleEvent.Ready,...) 但这没有帮助。通过在共享模型上设置一些数据,我实际上找到了一种解决方法。这并不理想,但它解决了我的问题。

标签: apache-flex url module loaderinfo


【解决方案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

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

【讨论】:

  • 我提取了一些用于存储“moduleInfo”的行以供以后使用。这个例子看起来太混乱了..虽然现在你指出这个例子是蹩脚的++。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2017-12-01
    • 1970-01-01
    • 2016-04-28
    • 2015-05-28
    • 2015-07-23
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多