0

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 の壮大な新人であることを認めているので、これについては完全に間違っている可能性があります。

よろしくお願いします

4

1 に答える 1

0

ご質問に直接お答えすることはできませんが、より経験豊富な方があなたの質問を確認するまで、正しい方向に導くことができれば幸いです。

application タグの creationComplete イベント (または、これが独自のカスタム コンポーネントである場合は最上位の mxml コンポーネント タグ) のイベント ハンドラーを作成し、そこで ConfigServer をインスタンス化します。画面に何かが表示される前の最後の停止であるため、そこで初期化を行う方が一般的にはきれいです。イベントの詳細については、Adobe Live ドキュメントを参照してください。私の言い換えは、公式文書の代わりと見なされるべきではありません。

また、 trace() ステートメントを使用してテキストをコンソールに出力し、実行順序やオブジェクトがインスタンス化されているかどうかをデバッグするのに役立てることもできます。詳細については、Adobe Live ドキュメントをもう一度確認してください。

幸運を。

于 2011-08-30T10:06:16.570 に答える