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