2011-08-30 25 views
0

我需要读取浏览器在调用Flex应用程序时显示的URL,因为我将在配置Cairngorm远程对象的mxml中引用它。从Cairngorm配置的ActionScript 3读取服务器URL

我会达到的目标是自动配置Cairngorm服务从环境到环境(dev,test,qa,prod),而无需在mxml或其他ActionScript中静态设置值。由于Flex客户端部署在Web应用程序的战争根目录中,因此阅读浏览器指向的位置就足够了。

我写了一个类,它是这样做的:

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应用程序生命周期的一个点,这样loaderURL是定义以便我可以构造ConfigServer?在启动事件中初始化完成时?

我承认我是一个Flex史诗新手,所以这可能是我完全错误的。

问候

回答

0

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

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

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

祝你好运。

相关问题