2011-09-01 4 views
0

Кто-нибудь знает, есть ли способ поймать событие ItemClick в Flex ComboBox (или что-то подобное). Может быть, есть трюк .. :) Я понимаю, что я могу настроить его, но это не подходит моему делу.Событие ItemClick в flex Combobox

Спасибо за ваше время :)

+0

Nice nick, little aerial;) Зачем вам нужен itemClick? Возможно, исходная проблема имеет другое решение. – moropus

+0

Спасибо :) Может быть, ты прав ... но мне все еще любопытно, чтобы это работало. Итак, единственным решением является настройка? – Antenka

+0

Какую комбинированную ячейку вы используете? MX или Spark? – Constantiner

ответ

1

Как вы можете видеть в mx:ComboBox источников, функция, создавая выпадающий список, является частным, слушателю ITEM_CLICK является приватным и сам список также частные:

private var _dropdown:ListBase; 

private function getDropdown():ListBase 
{ 
     // ... 

     _dropdown = dropdownFactory.newInstance(); 

     // ... 

     _dropdown.addEventListener(ListEvent.ITEM_CLICK, dropdown_itemClickHandler); 

     // .... 
} 

private function dropdown_itemClickHandler(event:ListEvent):void 
{ 
    if (_showingDropdown) 
    { 
     close(); 
    } 
} 

Таким образом, вы не можете даже продлить ComboBox.

Единственное публичное дело - dropdownFactory, что теоретически может быть переоценено, чтобы как-то зарегистрировать созданный выпадающий список или создать расширенный список. Но проблема, которую я вижу, заключается в том, что ComboBox не является родительским элементом выпадающего списка - PopupManager. Это может затруднить диспетчерские (пузырьковые) события.

+0

Хммм .. правда, довольно сложно. Что, если, скажем, есть 2 компонента: ComboBox и List. Установите dropdownWidth Combo в 0. Поместите список под ним. И когда пользователь каким-то образом пытается открыть комбо, покажите элемент управления List (вместо dropDown). Я просто сомневаюсь. Это грязное решение? Я видел такую ​​вещь в одном из компонентов AutoComplete. – Antenka

+0

IMHO, проще написать собственный 'ComboBox' со всем, что вам нужно (с блэкджеком и шлюхами), который частично копируется с оригинала. Я уже написал редактируемый файл с фильтрами и деревом в качестве раскрывающегося списка - и я не могу себе представить, как я буду патч и взломать оригинальную «ComboBox», чтобы добиться желаемого поведения. – moropus

+0

Хех, правда .. спасибо за объяснения (доходчиво: Р). Не удалось избежать настройки .. выключить, чтобы написать мой Combo-Masterpiece :) – Antenka

1

Я думаю, что следующий документ будет полезен

ItemClick event in flex List

+0

Спасибо, документ действительно полезен, но мне нужно это событие в ComboBox :) – Antenka

+0

Uhm .. одна идея о ItemClick и List ... заменяет выпадающее меню ComboBox списком - это хорошая идея , или эпический провал? :) – Antenka

+1

Выпадающий список в 'ComboBox' уже является' List': 'private var _dropdownFactory: IFactory = new ClassFactory (List);' – moropus

0

Я нашел это решение. Я просто хочу выпадающий список искры с событием itemClick и без опции itemselect (не показывать выбранную метку элемента на кнопке)

[Event(name="itemClick", type="mx.events.ItemClickEvent")] 

public class ItemClickDropDownList extends DropDownList 
{ 

    public function ItemClickDropDownList() 
    { 
     super(); 
    } 

    override public function closeDropDown(commit:Boolean):void 
    { 
     super.closeDropDown(commit); 

     var e:ItemClickEvent = new ItemClickEvent(ItemClickEvent.ITEM_CLICK, true); 
     e.item = this.selectedItem; 
     e.index = this.selectedIndex; 
     dispatchEvent(e); 

     //Deselect item 
     this.selectedIndex = -1; 
    } 
Смежные вопросы