|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+4 01.09.09]
Регистрация: Aug 2009
Сообщений: 27
|
Фильтрация данных в editable ComboBox
Привет. Возникла необходимость реализации инкрементного поиска (фильтрации данных в комбобоксе) аля гугл, для этого наиболее подходящим был выбран компонент ComboBox с выставленным свойством Editable=true, данные полностью помещаються в коллекцию, запихиваються в комбобокс и фильтруются при помощи "filterFunction", фильтр накладывается при воде каких либо символов.
Но возникла такая проблема, при применении фильтра к коллекции, у комбобокса меняется дата провайдер и введенный текст соответственно тоже удалялся, даже если запоминать введенный символ до наложения фильтра и заполнять поле ввода после наложения фильтра, то происходит выделение этого символа и последующее продолжение ввода удаляет предыдущий введенный текст, потому что он выделен, а программно убрать выделение или управлять кареткой в эдитейбл поле комбобокса нельзя. Накопление введенных символов не предлагать. Надеюсь понятно изложил суть проблемы, какие варианты решения можете подсказать? |
|
|||||
Modus ponens
|
>> а программно убрать выделение или управлять кареткой в эдитейбл поле комбобокса нельзя
Это почему же? - это же обычный TextField. Просто надо поискать, как до него добраться...
__________________
Hell is the possibility of sanity |
|
|||||
[+4 01.09.09]
Регистрация: Aug 2009
Сообщений: 27
|
Цитата:
Добавлено через 11 часов 42 минуты решение найдено package classes.common { import flash.events.KeyboardEvent; import mx.collections.ArrayCollection; import mx.controls.ComboBox; public class CustomCombobox extends ComboBox { private var tmpText: String; public function CustomCombobox() { super(); addEventListener(KeyboardEvent.KEY_UP, function(event: KeyboardEvent):void{ tmpText = event.currentTarget.text; dataProvider.filterFunction = producerListFilterFunction; dataProvider.refresh(); text = tmpText; if(dataProvider.length > 0) open(); } ); } private function producerListFilterFunction(item:Object):Boolean{ return !Boolean(String(item.label).toUpperCase().indexOf(text.toUpperCase(), 0)); }override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ super.updateDisplayList(unscaledWidth, unscaledHeight); if (editable){ textInput.selectionBeginIndex = text.length; textInput.selectionEndIndex = text.length; } }} } |
|
|||||
Modus ponens
|
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 19:46. |
|
« Предыдущая тема | Следующая тема » |
|
|