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

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

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

mxml код:

& # 060 mx: RemoteObject id = "myService" назначения = "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>

my 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 ]

1 голос
/ 01 апреля 2010

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

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

0 голосов
/ 01 апреля 2010

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

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

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

endpoint="{Application.application.home}/messagebroker/amf"
...