为什么flex远程对象不能在自定义组件中工作?

时间:2010-03-31 18:57:11

标签: flex flash actionscript-3 java-ee blazeds

请指教这个flex noob。我的main.mxml中有一个remoteobject。我可以从main.mxml上的init()函数调用服务上的函数,我的java调试器会触发断点。当我将remoteobject声明和函数调用移动到自定义组件(在main.mxml中声明)时,java-side上的远程函数不再被调用,没有触发断点,没有错误,沉默。

怎么会这样?没有拼写错误,或类似的东西。我该怎么做才能搞清楚?

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>

我的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 个答案:

答案 0 :(得分:1)

子组件在父级之前调用creationComplete(因此home为null)。解决方案是在读取数据后从父节点抛出事件(如InitDataCompleted),并在子组件中侦听此事件(因此不要依赖于子节点中的creationcomplete)。

然而,比这更重要的是你如何在将来诊断出这类问题。像代理(例如Charles)这样的简单工具应该有所帮助。

答案 1 :(得分:0)

您的端点值

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

你为什么使用$(在Application.application之前......这应该是{as in:

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