Почему гибкий удаленный объект не сможет работать с пользовательским компонентом?

Пожалуйста, просветите этот гибкий нуб. У меня есть удаленный объект в моем main.mxml. Я могу вызвать функцию службы из функции init() на моем main.mxml, и мой отладчик java вызывает точку останова. Когда я перемещаю объявление удаленного объекта и вызов функции в пользовательский компонент (который объявлен в main.mxml), удаленная функция на стороне java больше не вызывается, никакие точки останова не срабатывают, нет ошибок, тишина.

Как это могло произойти? Никаких орфографических ошибок или чего-то в этом роде. Что я могу сделать, чтобы понять это?

код mxml:

& # 060 mx:RemoteObject id="myService" destination="remoteService" endpoint="${Application.application.home}/messagebroker/amf" & # 062 & # 060 /mx:RemoteObject & # 062

вызов функции - это просто 'myService.getlist();'

когда я перемещаю его в пользовательский компонент, я импортирую mx.core.Application; так что компилятор не кричит

мой дочерний компонент: child.mxml

<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" >
    <mx:Script>
        <![CDATA[
            import mx.core.Application;
            public function init():void {
                helloWorld.sayHello();
            }
        ]]>
    </mx:Script>

    <mx:RemoteObject id="helloWorld" destination="helloService" endpoint="$(Application.application.home}/messagebroker/amf" />

    <mx:Label text="{helloWorld.sayHello.lastResult}" />
</mx:Panel>

мой main.mxml:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" xmlns:test="main.flex.*" >
    <mx:Script>
        <![CDATA[
            [Bindable]
            public var home:String;
            [Bindable]
            public var uName:String;
            public function init():void {
                //passed in by wrapper html
                home = Application.application.parameters.appHome;
                uName = Application.application.parameters.uName;
            }
        ]]>
    </mx:Script>
    <test:child />
</mx:Application>

2 ответа

Решение

Дочерние компоненты вызывают creationComplete перед родителем (поэтому home имеет значение null). Решение состоит в том, чтобы выбросить событие (например, InitDataCompleted) из родительского объекта после того, как вы прочитали данные, и в дочерних компонентах прослушать это событие (поэтому не полагайтесь на creationcomplete в дочернем).

Однако важнее то, как вы можете диагностировать подобные проблемы в будущем. Простой инструмент, такой как прокси (например, Чарльз), должен помочь.

Для вашего конечного значения у вас есть

endpoint="$(Application.application.home}/messagebroker/amf"

Почему вы используете $(до Application.application... Это должно быть {как в:

endpoint="{Application.application.home}/messagebroker/amf"
Другие вопросы по тегам