Я пытаюсь понять распространение событий в среде Flex и у меня есть следующие сомнения по этому поводу:
Сценарий: У меня есть встроенный компонент DropDownList
на change
, из которого я хочу создать пользовательское событие refreshPreview
и хочу распространить его на пользовательский компонент PictureComponent
.
В mxml пользовательского компонента я добавил следующую директиву метаданных, чтобы зарегистрировать событие refreshPreview
с помощью компилятора
<fx:Metadata>
[Event(name="refreshPreview", type="flash.events.Event")]
</fx:Metadata>
Сведения о макете: В моем основном mxml-приложении я выложил DropDownList
и пользовательский компонент таким образом, чтобы оба были братьями и сестрами (то есть имеют общего косвенного родителя)
например
<s:Group id="contentGroup">
<s:Group id="formGroup">
<s:Form x="11"
y="86">
<s:FormItem label="Employee:">
<!-- Built-in component -->
<s:DropDownList id="dropDownList"
dataProvider="{employeesCollection}"
labelField="LASTNAME">
</s:DropDownList>
</s:FormItem>
</s:Form>
</s:Group>
<s:Group id="pictureGroup">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<!-- Custom Component -->
<p:PictureComponent x="360"
y="2"
employee="{new Employee(dropDownList.selectedItem.ID,firstName.text, lastName.text)}"
refreshPreview="picturecomponent1_refreshPreviewHandler(event)">
</p:PictureComponent>
</s:Group>
</s:Group>
Также я добавил обработчики событий для встроенного компонента в методе init (), который вызывается при событии creationComplete:
// Initializes this component
private function init():void
{
//add event listeners for dropDownList
dropDownList.addEventListener(IndexChangeEvent.CHANGE, employeeChangeEventHandler);
}
А вот обработчик события для обработки события встроенного компонента, подготовки пользовательского события и его отправки:
private function employeeChangeEventHandler(event:IndexChangeEvent):void
{
var eventObject:Event=new Event("refreshPreview");
dispatchEvent(eventObject);
}
Я вижу, что событие refreshPreview
не распространяется на пользовательский компонент.
Я сомневаюсь, что это потому, что встроенный компонент является родным объектом цели (где генерируется событие), а не родителем. Если по этой причине вы не могли бы помочь мне узнать, как заставить событие refreshPreview
распространяться на пользовательский компонент?