Это крутая проблема.
Объект Label, используемый Slider, оказывается подклассом Label (называемым SliderLabel). Поэтому, вероятно, наилучшим подходом было бы создать подкласс Slider и добавить прослушиватели событий для меток.
Я думаю, вы могли бы успешно добавить прослушиватели событий в методе commitProperties или методе updateDisplayList. Я не уверен, что один из них предпочтительнее другого, но commitProperties выглядит как more правильный выбор.
Итак, в вашем подклассе Slider:
override protected function commitProperties():void
{
super.commitProperties();
for(var i:int = 0; i < labelObjects.numChildren; i++)
{
if(!SliderLabel(labelObjects.getChildAt(i)).hasEventListener(MouseEvent.CLICK))
{
SliderLabel(labelObjects.getChildAt(i)).addEventListener(MouseEvent.CLICK,sliderLabelClickListener);
}
}
}
а потом может быть что-то подобное для sliderLabelClickListener
:
private function sliderLabelClickListener(e:MouseEvent):void
{
dispatchEvent( new SliderLabelClickEvent(e.target) );
}
Я думаю, что вам нужно настраивать событие там, а не отправлять обычное Event
, чтобы вы могли включить имя / идентификатор / значение метки.
Кроме того, вы можете захотеть добавить метод dispose для удаления слушателя события CLICK из меток, когда Slider удален со сцены. Это не проблема, если вы не собираетесь удалять Slider, но если вы это делаете, я обычно создаю метод с именем dispose
и помещаю туда всю мою логику удаления вручную (удаление прослушивателей событий, удаление / удаление ChangeWatchers ). Затем я назначаю слушателя событию REMOVED_FROM_STAGE
компонента и вызываю метод dispose
из этого слушателя.