我需要读取浏览器在调用Flex应用程序时显示的URL,因为我将在配置Cairngorm
远程对象的mxml中引用它。
我将达到的目标是自动配置从环境到环境(dev,test,qa,prod)的Cairngorm
服务,而无需在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
构造函数和我应用的每一种(我已知的)技术(静态或单身或公共等)时,我总是遇到同样的错误:
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 Application生命周期中是否有一个点定义了loaderURL
,以便构建ConfigServer
?在初始化完成的启动事件中?
我承认我是一名Flex史诗新秀,所以我可能完全错了。
祝你好运
答案 0 :(得分:0)
我不能直接回答你的问题,但希望我能指出你正确的方向,直到有经验的人看到你的问题。
为应用程序标记的creationComplete事件创建事件处理程序(如果这是您自己的自定义组件,则创建最高的mxml组件标记)并在那里实例化ConfigServer。在那里进行初始化通常比较简洁,因为它是在屏幕上显示任何内容之前的最后一站。您可以在adobe live docs中阅读有关该活动的更多信息。我的解释绝不应该被视为官方文件的替代品。
您还可以使用trace()语句将文本输出到控制台,以帮助您调试执行顺序以及是否已实例化对象。您可以再次查看adobe live docs以获取更多信息。
祝你好运。