0

我需要读取调用 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 史诗级新秀,所以我可能完全错了。

此致

4

1 回答 1

0

我无法直接回答您的问题,但希望我可以为您指明正确的方向,直到更有经验的人看到您的问题。

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

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

祝你好运。

于 2011-08-30T10:06:16.570 回答