apache-flex - Flex 3 事件在复合自定义组件上传播?

标签 apache-flex actionscript-3 flex3 event-handling

我有一个由可选控件(单选按钮)组成的自定义组件 和一个文本输入。我想执行一些逻辑来响应 更改这两个控件的事件,但之后我想要 在复合组件的更改处理程序上注册的任何内容 也可以进行更改来处理事件。问题是,当我 重新调度事件目标已更改为我的自定义的事件 组件,丢失原始事件的目标。

这是我的自定义组件:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" label="{listItem.@text}" data="{<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="573b3e24231e23323a79173b3221323b7923380423253e3930" rel="noreferrer noopener nofollow">[email protected]</a>()}">

    <mx:Script>
        <![CDATA[
            import mx.controls.RadioButtonGroup;
            [Bindable]
            public var selected: Boolean;
            [Bindable]
            public var text: String;
            [Bindable]
            public var listItem: XML;
            [Bindable]
            public var group: RadioButtonGroup;

            private function onSelectionChange(event: Event): void {
                selected = event.target.selected;
                dispatchEvent(event);
            }

            private function onTextChange(event: Event): void {
                text = event.target.text;
                dispatchEvent(event);
            }
        ]]>
    </mx:Script>

    <mx:RadioButton group="{group}" label="{label}" selected="{selected}" change="onSelectionChange(event)"/>
    <mx:TextInput width="100%"
                  maxChars="{listItem.specify.@entryLength}"
                  enabled="{selected}"
                  visible="{listItem.hasOwnProperty('specify')}"
                  includeInLayout="{visible}"
                  change="onTextChange(event)"/>
</mx:HBox>

在从该组件接收更改事件的事件处理程序中,我 看到 event.target 是SpecifyRadioButton的实例,而不是 正如我所期望的,TextInput 或 RadioButton。我该如何宣传 在这里得到我想要的东西?

Getting event [Event type="change" bubbles=false cancelable=false eventPhase=2] 
from question0.tabSurvey.questionForm.questionContainer.Single94.VBox95.SpecifyRadioButton111

最佳答案

不要重新分派(dispatch)原始事件,而是创建一个新事件并将原始事件作为 origEvent 属性传递。 SpecifyRadioButton 分派(dispatch)的新事件可以是扩展 Event 的自定义事件类,也可以偷懒而仅使用 mx.events.DynamicEvent。

示例:

import mx.events.DynamicEvent;

private function onSelectionChange(event: Event): void {
    selected = event.target.selected;
    var newEvent:DynamicEvent = new DynamicEvent(Event.CHANGE);
    newEvent.origEvent = event;
    dispatchEvent(newEvent);
}

然后,在SpecifyRadioButton.change 事件的处理程序中,引用event.origEvent 属性。

关于apache-flex - Flex 3 事件在复合自定义组件上传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180064/

相关文章:

apache-flex - Flex Google Chrome 缓存问题

apache-flex - 如何在Adobe Flex中显示PDF?

actionscript-3 - 如何检测 AS3 中的可选静态文本字段?

apache-flex - Flex dataGrid 使用ItemRenderer 在datagridcolumn 中添加按钮?

css - 您如何在 Flex 4.5.1 中使用 CSS 样式设置 TextFlow 的样式?

actionscript-3 - 是否有可能通过以编程方式高速移动物体来获得 "blur motion"

flash - 在 Flash CS5 中拖动对象时鼠标悬停

apache-flex - 闪存与 Flex

actionscript-3 - 为什么Actionscript 不支持重载?

apache-flex - Flex - Remoting vs HTTPService - 何时使用什么?