Вы должны перепрыгнуть через несколько обручей для этого, потому что DropDownList предотвращает запуск любого MouseEvent.CLICK
из объекта внутри ItemRenderer.
Перво-наперво: вам понадобится пользовательское событие для этогоРабота.Тот, который несет ваш предмет или, по крайней мере, его индекс.Например:
public class ItemEvent extends Event {
public static const REMOVE:String = "itemRemove";
public var item:MyClass;
public function ItemEvent(type:String, item:MyClass,
bubbles:Boolean=false,
cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.item = item;
}
override public function clone():Event {
return new ItemEvent(type, item, bubbles, cancelable);
}
}
Затем вы создаете пользовательский ItemRenderer с кнопкой «delete», который будет отправлять это событие.
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
private function remove():void {
owner.dispatchEvent(
new ItemEvent(ItemEvent.REMOVE, data as MyClass)
);
}
]]>
</fx:Script>
<s:Label id="labelDisplay" verticalCenter="0" left="10" />
<s:Button verticalCenter="0" right="10" width="16" height="16"
mouseDown="remove()" />
</s:ItemRenderer>
Важно, что вы ловите событие MOUSE_DOWN кнопки, поскольку его событие CLICK не срабатывает (как упоминалось ранее).Свойство owner
ItemRenderer относится к списку, от которого он является дочерним.
Теперь последняя часть головоломки.Вот ваш DropDownList с пользовательским ItemRenderer:
<s:DropDownList id="myDropDownList" dataProvider="{dp}"
itemRenderer="MyItemRenderer" />
А вот как вы прослушиваете это пользовательское событие и удаляете выбранный элемент:
myDropDownList.addEventListener(ItemEvent.REMOVE, removeSelectedItem);
private function removeSelectedItem(event:ItemEvent):void {
var items:IList = myDropDownList.dataProvider;
var index:int = items.getItemIndex(event.item);
items.removeItemAt(index);
}
Поскольку мы поймали MOUSE_DOWN вместо CLICK myDropDownList.selectedIndex
свойство по-прежнему будет на ранее выбранном элементе (или -1, если ни один не был выбран).Вот почему нам понадобилось пользовательское событие, потому что не было другого способа узнать, какой элемент вы хотите удалить.