Cairngorm
リモート オブジェクトを構成する mxml で URL を参照するため、Flex アプリケーションが呼び出されたときにブラウザーが表示する URL を読み取る必要があります。
私が到達する目標はCairngorm
、mxml またはその他の ActionScript で値を静的に設定することなく、環境から環境 (dev、test、qa、prod) にサービスを自動的に構成することです。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 の壮大な新人であることを認めているので、これについては完全に間違っている可能性があります。
よろしくお願いします