在Flex - mxml中的自定义组件之间传递值

时间:2009-01-23 14:34:34

标签: flex components

如何将自定义组件中的值传递回main.mxml?  我需要这样做才能传回一个数组集合

2 个答案:

答案 0 :(得分:7)

您可以使用静态Application.application.yourPublicMethodName()或.yourPublicPropertyName = n直接调用Application,但您也可以考虑使用事件框架,以保持组件松散耦合。由于您的组件根据定义是事件调度程序,因此您只需从其中调度事件,并让Application类侦听该事件。

在MXML中,对于组件类来说,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">

    <mx:Metadata>
        [Event(name="buttonClicked", type="flash.events.Event")]
    </mx:Metadata>

    <mx:Script>
        <![CDATA[

            public var someValue:int = 0;

            private function buttonClick():void
            {
                someValue = 1;
                dispatchEvent(new Event("buttonClicked"));
            }

        ]]>
    </mx:Script>

    <mx:Button label="Click Me" click="buttonClick()" />

</mx:Canvas>

...对于应用程序,像这样:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">

    <mx:Script>
        <![CDATA[

            import mx.controls.Alert;

            private function myComponent_buttonClicked(event:Event):void
            {
                Alert.show(event.currentTarget.someValue.toString());
            }

        ]]>
    </mx:Script>

    <local:MyComponent buttonClicked="myComponent_buttonClicked(event)" />

</mx:Application>

组件类中的Event元数据标签告诉编译器组件调度flash.events.Event-type事件(“buttonClicked”),它将其公开为MyComponent标记上的事件;然后,您需要做的就是为该事件连接一个监听器,并通过事件的currentTarget属性,您可以访问该组件的所有公共数据。

我认为我会为你提供一个有趣的选择。希望它有所帮助!

答案 1 :(得分:0)

得到了它;只需要导入mx.core.Application;