Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Фильтрация данных в editable ComboBox (http://www.flasher.ru/forum/showthread.php?t=128643)

Alex_41 13.08.2009 20:21

Фильтрация данных в editable ComboBox
 
Привет. Возникла необходимость реализации инкрементного поиска (фильтрации данных в комбобоксе) аля гугл, для этого наиболее подходящим был выбран компонент ComboBox с выставленным свойством Editable=true, данные полностью помещаються в коллекцию, запихиваються в комбобокс и фильтруются при помощи "filterFunction", фильтр накладывается при воде каких либо символов.
Но возникла такая проблема, при применении фильтра к коллекции, у комбобокса меняется дата провайдер и введенный текст соответственно тоже удалялся, даже если запоминать введенный символ до наложения фильтра и заполнять поле ввода после наложения фильтра, то происходит выделение этого символа и последующее продолжение ввода удаляет предыдущий введенный текст, потому что он выделен, а программно убрать выделение или управлять кареткой в эдитейбл поле комбобокса нельзя. Накопление введенных символов не предлагать. Надеюсь понятно изложил суть проблемы, какие варианты решения можете подсказать?

wvxvw 13.08.2009 20:29

>> а программно убрать выделение или управлять кареткой в эдитейбл поле комбобокса нельзя
Это почему же? - это же обычный TextField. Просто надо поискать, как до него добраться...

Alex_41 14.08.2009 02:50

Цитата:

Сообщение от wvxvw (Сообщение 842570)
>> а программно убрать выделение или управлять кареткой в эдитейбл поле комбобокса нельзя
Это почему же? - это же обычный TextField. Просто надо поискать, как до него добраться...

С пары тыков не получилось, погуглил, ничего толком не нашел, решил спросить тут. Будем копать.

Добавлено через 11 часов 42 минуты
решение найдено

Код AS3:

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;
            }
        }
        }
}


wvxvw 14.08.2009 15:19

http://www.adobe.com/cfusion/exchang...&extid=1047291

Оказалось, был готовый :)


Часовой пояс GMT +4, время: 07:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.