我需要读取调用 Flex 应用程序时浏览器显示的 URL,因为我会在配置Cairngorm
远程对象的 mxml 中引用它。
我要达到的目标是在Cairngorm
不同环境(dev、test、qa、prod)之间自动配置服务,而无需在 mxml 或其他 ActionScript 中静态设置值。由于 Flex 客户端部署在 webapp 之战的根目录中,因此读取浏览器指向的位置就足够了。
我写了一个这样做的类:
public class ConfigServer {
public function ConfigServer() {
var loaderUrl:String = FlexGlobals.topLevelApplication.loaderInfo.loaderURL;
var urlToSet:String = <loaderURL-string-manipulation>;
_serverUrl = urlToSet;
}
private var _serverUrl:String = '';
public function get serverUrl():String
{
return _serverUrl;
}
}
在我的 mxml 中,我会这样做:
<mx:Script>
<![CDATA[
import org.fao.fapda.util.ConfigServer;
private var configuration:ConfigServer = new ConfigServer();
]]>
</mx:Script>
<mx:RemoteObject
id="userService"
destination="userService"
endpoint= "{configuration.serverUrl}/messagebroker/amf"
showBusyCursor="true"
requestTimeout="100"
/>
但是每当我调用ConfigServer
构造函数和我应用的每一种(我知道的)技术(静态或单例或公共 ro 等)时,我总是遇到同样的错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at org.fao.fapda.util::ConfigServer()[C:\dev\workspaces\FAPDA\trunk\FAPDA-client\src\org\fao\fapda\util\ConfigServer.as:8]
Cairngorm
服务初始化如下:
<fx:Declarations>
<cut/>
<services:FAPDAServices id="services"/>
<cut/>
</fx:Declarations>
问题是FAPDAServices.mxml
之前读取的运行FlexGlobals
是有效的......
在 Flex 应用程序生命周期中是否有loaderURL
定义这样的点以便我可以构建ConfigServer
?什么时候在初始化完成的启动事件中?
我承认我是 Flex 史诗级新秀,所以我可能完全错了。
此致