Чтение URL-адреса сервера из ActionScript 3 для конфигурации Cairngorm - PullRequest
0 голосов
/ 30 августа 2011

Мне нужно прочитать URL-адрес, который отображается в браузере при вызове приложения Flex, потому что я бы сослался на него в mxml, конфигурирующем Cairngorm удаленные объекты.

Цель, которую я бы достиг, - это автоматическая настройкаCairngorm сервисы из среды в среду (dev, test, qa, prod) без статической установки значения в mxml или другом ActionScript.Поскольку клиент Flex развернут в корне войны веб-приложения, достаточно прочитать, куда указывает браузер.

Я написал класс, который делает это:

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 epic, так что, возможно, я совершенно не прав в этом.

С уважением

1 Ответ

0 голосов
/ 30 августа 2011

Я не могу напрямую ответить на ваш вопрос, но, надеюсь, я смогу направить вас в правильном направлении, пока кто-то более опытный не увидит ваш вопрос.

Создайте обработчик событий для события creationComplete тега приложения (или самого высокоготег компонента mxml (если это ваш собственный компонент) и создайте в нем экземпляр ConfigServer.Обычно лучше выполнять инициализацию там, поскольку это последняя остановка перед тем, как что-либо отобразится на экране.Вы можете прочитать больше о событии в Adobe Live Docs.Мое перефразирование никогда не должно рассматриваться как замена официальной документации.

Вы также можете использовать оператор trace () для вывода текста на консоль, чтобы помочь вам отладить порядок выполнения и определить, был ли создан экземпляр объекта.,Еще раз вы можете проверить Adobe Docs для получения дополнительной информации.

Удачи.

...