Flex 组件通信

Posted

技术标签:

【中文标题】Flex 组件通信【英文标题】:Flex component communication 【发布时间】:2011-01-16 21:55:03 【问题描述】:

我使用从不同的 MXML 文件加载的弹出窗口:

private function showAddPopUp():void
    addPopUP = PopUpManager.createPopUp(this, add_popup, true);
    PopUpManager.centerPopUp(addPopUP);

那个文件如下(add_popus.mxml):

<mx:VBox   paddingLeft="5" paddingTop="5" paddingRight="5" paddingBottom="5">
    <mx:Label text="Enter name of the source:" />
    <mx:TextInput  id="textName" />
    <mx:Label text="Enter URL for the source:" />
    <mx:TextInput  id="textURL" />
    <mx:HBox >
        <mx:Button label="OK" id="buttonOK" textAlign="center"/>
        <mx:Button label="Cancel" id="buttonCancel" click="PopUpManager.removePopUp(this)" textAlign="center"/>
    </mx:HBox>
</mx:VBox>

问题是在弹出窗口中单击 buttonOK 后,我不知道如何将文本输入中的文本值传递给主组件。我尝试了自定义事件,但没有成功。文档不是很有帮助。我会很感激任何想法。

完整代码在这里:http://github.com/jbajor/Newspapair

【问题讨论】:

为什么自定义事件不起作用?你有错误吗?难道不能为那个事件获得一个监听器吗? 是的,自定义事件是这样做的正确方法。如果它们不起作用,那么让我们帮助您找出问题所在。 从文本字段传递字符串到底是什么意思?类似this.owner.someMethod(textName.text);?这不是最好的方法 - 事件传播是要走的路。 【参考方案1】:

通过按钮点击发送事件

<!-- AddPopUp.mxml -->
<mx:Button label="OK" id="buttonOK" textAlign="center" 
    click="dispatchEvent(new Event(POPUP_DONE))"/>
<mx:Script>
<![CDATA[
    public static const POPUP_DONE:String = "popupDone";
]]>
</mx:Script>

然后在另一堂课上听。 event.target 将为您提供弹出窗口的句柄。

private function showAddPopUp():void

    var addPopUp:AddPopup = PopUpManager.createPopUp(this, add_popup, true);
    addPopUp.addEventListener(AddPopUp.POPUP_DONE, onPopupDone);
    PopUpManager.centerPopUp(addPopUP);

private function onPopupDone(e:Event):void

    var popup:AddPopUp = AddPopUp(e.target);
    trace(popup.textName.text);

【讨论】:

它确实有效,但我仍在尝试从文本字段传递字符串。

以上是关于Flex 组件通信的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript 的 flex air 移动通信

使用 RemoteObject 和多个组件时的 Flex 4 最佳实践

12.组件化开发2-非父子组件之间通信-祖先和后代之间的通信

vue组件之间的通信, 父子组件通信,兄弟组件通信

React 父子组件通信

VUE:组件与组件之间的通信