代码之家  ›  专栏  ›  技术社区  ›  gtrak

为什么FlexRemoteObject不能在自定义组件中工作?

  •  0
  • gtrak  · 技术社区  · 14 年前

    请开导这个灵活的noob。我在main.mxml中有一个remoteobject。我可以从main.mxml上的init()函数调用服务上的函数,java调试器会触发断点。当我将remoteobject声明和函数调用移到一个自定义组件(在main.mxml中声明)中时,java端的远程函数不再被调用,不会触发断点,不会出现错误,也不会保持沉默。

    怎么会这样?没有拼写错误之类的。我该怎么做才能弄清楚呢?

    mxml代码:

    &#060 mx:RemoteObject id=“myService” endpoint=“${Application.Application.home}/messagebroker/amf”&#062 &#060/mx:远程对象#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 回复  |  直到 14 年前
        1
  •  1
  •   Cornel Creanga    14 年前

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

        2
  •  0
  •   Fergal    14 年前

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

    为什么要在应用程序之前使用$(Application.Application。。。这应该是{例如:

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