从ActionScript 3读取服务器URL以进行Cairngorm配置

时间:2011-08-30 09:44:00

标签: flex actionscript-3 url flash cairngorm

我需要读取浏览器在调用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.mxmlFlexGlobals生效之前运行{...}}

Flex Application生命周期中是否有一个点定义了loaderURL,以便构建ConfigServer?在初始化完成的启动事件中?

我承认我是一名Flex史诗新秀,所以我可能完全错了。

祝你好运

1 个答案:

答案 0 :(得分:0)

我不能直接回答你的问题,但希望我能指出你正确的方向,直到有经验的人看到你的问题。

为应用程序标记的creationComplete事件创建事件处理程序(如果这是您自己的自定义组件,则创建最高的mxml组件标记)并在那里实例化ConfigServer。在那里进行初始化通常比较简洁,因为它是在屏幕上显示任何内容之前的最后一站。您可以在adobe live docs中阅读有关该活动的更多信息。我的解释绝不应该被视为官方文件的替代品。

您还可以使用trace()语句将文本输出到控制台,以帮助您调试执行顺序以及是否已实例化对象。您可以再次查看adobe live docs以获取更多信息。

祝你好运。