Flex:将资产加载到外部加载的模块中
时间:2020-03-06 14:40:01 来源:igfitidea点击:
因此,我有一个Flex项目,该项目使用ModuleManager而不是模块加载器加载模块。我遇到的问题是,加载外部资产(如视频或者图像)的路径必须相对于Module swf ...而不是相对于加载模块的swf。
问题是如何使用相对于父SWF而不是模块SWF的路径将资产加载到已加载的模块中?
啊!因此,在研究SWFLoader类时,我在私有函数loadContent中发现了以下代码块:
// make relative paths relative to the SWF loading it, not the top-level SWF if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\") == 0)) { var rootURL:String; if (SystemManagerGlobals.bootstrapLoaderInfoURL != null && SystemManagerGlobals.bootstrapLoaderInfoURL != "") rootURL = SystemManagerGlobals.bootstrapLoaderInfoURL; else if (root) rootURL = LoaderUtil.normalizeURL(root.loaderInfo); else if (systemManager) rootURL = LoaderUtil.normalizeURL(DisplayObject(systemManager).loaderInfo); if (rootURL) { var lastIndex:int = Math.max(rootURL.lastIndexOf("\"), rootURL.lastIndexOf("/")); if (lastIndex != -1) url = rootURL.substr(0, lastIndex + 1) + url; } } }
因此,显然,Adobe付出了额外的努力来使图像加载到实际的SWF文件中,而不是在顶级SWF文件中加载(没有其他标志可供选择...),所以我想我应该提交功能请求以具有某种"相对于SWF加载"标志,直接编辑SWFLoader,或者我应该拥有相对于单个SWF的所有内容,而不是顶层...是否有任何建议?
解决方案
我们可以导入mx.core.Application
,然后使用Application.application.url获取模块中主机应用程序的路径,并将其用作构建URL的基础。
有关处理URL的帮助,请参见标准Flex库中的URLUtil类和as3corelib项目中的URI类。
我们可以在模块中使用this.url并将其用作baseURL。
var urlParts:Array = this.url.split("/"); urlParts.pop(); baseURL = urlParts.join("/"); Alert.show(baseURL);
并使用{baseURL +" /location/file.ext"}
代替/ location / file.ext