2011-08-30 55 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文檔以獲取更多信息。

祝你好運。

相關問題