【发布时间】:2020-10-10 16:26:55
【问题描述】:
有很多与我类似的问题,但没有一个能解决我的问题。
我有这门课-
package com.test
{
import flash.events.*;
import flash.net.*;
import com.test.LogUtils;
import mx.logging.ILogger;
public class LoadExtUrl extends EventDispatcher
{
private var baseUrl:String;
private var log:ILogger = LogUtils.getLogger(LoadExtUrl);
public function LoadExtUrl()
{
log.debug ("100 In LoadExtUrl()");
super(null);
}
public function loadBaseUrl():String
{
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
function urlLoader_completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
this.baseUrl = loader.data.baseurl;
dispatchEvent(new Event("GOTRESULTS"));
log.debug ("200 In LoadExtUrl, baseUrl="+this.baseUrl);
}
loader.load(new URLRequest("sri-config-files/url.properties"));
log.debug ("300 In LoadExtUrl, baseUrl="+this.baseUrl);
return this.baseUrl;
}
}
}
现在我想在许多其他类中读取 baseUrl 的值。
在另一个类中,我有以下代码 -
public class UrlHelper
{
public static var myLoadExtUrl:LoadExtUrl = new LoadExtUrl();
public static var baseUrl:String;
public function UrlHelper()
{}
public static function getBaseUrl():void
{
myLoadExtUrl.addEventListener("GOTRESULTS", xmlLoadCompleted);
log.debug("400 In UrlHelper, baseUrl ="+baseUrl);
}
private static function xmlLoadCompleted(e:Event):void
{
baseUrl=myLoadExtUrl.loadBaseUrl();
log.debug("500 In UrlHelper, baseUrl ="+baseUrl);
}
}
记录顺序 -
100 In LoadExtUrl()
300 In LoadExtUrl, baseUrl=null
200 In LoadExtUrl, baseUrl=http://abcxyz.com:8080/
400 In UrlHelper, baseUrl =null --> here only I need the value
我该如何解决这个问题?
【问题讨论】:
-
因为 sendUrl(...) 方法不返回任何内容。因此,您没有得到任何 baseUrl = myLoadExtUrl.sendUrl();
-
嗨@Organis:谢谢。我更正了代码。实际上我尝试了很多选项并在这里粘贴了错误的代码。 sendUrl() 没有返回任何东西,它是无效的。但是在调用 addEventListener() 之后,在 sendUrl() 中,该值为 null。因为 addEventListener() 不是阻塞调用。所以我试图在 sendUrl() 中获取值并返回它,即使那样它也不起作用 -
public function sendUrl():String { ....... loader.addEventListener(Event.COMPLETE, handleComplete); loader.load(request); trace(baseUrl); -> NULL return baseUrl; } -
根据定义加载是异步的,因此只有在接收到加载器调度的
Event.COMPLETE时才会收到有效的baseUrl。所以,你做myLoadExtUrl.addEventListener(Event.COMPLETE,getThatUrl); function getThatUrl(e:Event=null) { this.baseUrl=myLoadExtUrl.baseUrl;} -
嗨@Vesper:是的,我已经做到了。请检查 UrlHelper.xmlLoadCompleted() 函数。我把它标记为强。在这里我放了 baseUrl=myLoadExtUrl.baseUrl;我在这个函数中得到了值,但在 UrlHelper.getBaseUrl() 中没有。如何解决?
-
@NirmalyaSinha 好的,现在您甚至都没有尝试将任何内容放入 UrlHelper.baseUrl 中,所以它显然是空的。此外,正如 Vesper 指出的那样,如果您从加载的数据中获取该数据,那么显然在您开始加载过程时它是不可用的。
标签: actionscript-3 flash