Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Валидация в Автокомплитере (http://www.flasher.ru/forum/showthread.php?t=166125)

ekonomizer 30.08.2011 13:36

Валидация в Автокомплитере
 
Здравствуйте помогите пожалуйста разобраться.
У меня есть компонент Автокомплита - представляет собой смесь DropDownList и TetxInputa.

http://pics.ivbt.ru/i/f/7f6e41125a94...2655d917ac.jpg

Текст автокомплитов (список вариантов) берется из ArrayCollection.
Также в нем есть кнопка с крестиком - удаляет весь текст в ней вся проблема.

Хочу повесить на автокомплит валидацию - если пользователь ничего не ввел или ввел какую нибудь хрень не из массива то рядом горит крест, если ввел или выбрал строку из массива то убираю крестик и делаю visible галочку.
Компонент:
Код:

<ns:AutoComplete id="autoComplete_1"
                dataProvider="{areas}"
                searchMode="sync"
                keyDown="autoComplete_1_keyDownHandler(event)"
                valueCommit="autoComplete_valueCommitHandler(event)"

Обработчик:
Код AS3:

protected function autoComplete_valueCommitHandler(event:FlexEvent):void
{
    // Для простоты проверяю только на одно значение.
    if (autoComplete_1.text != "Ярославская")
        redArea();
}

Проблема заключается в том как какое правильно выбрать событие для DropDownList - а именно кнопки удаления текста. Для TextInput выбрал keyDown и каждый раз сверяю попал ли юзер в данные из массива или нет все работает хорошо.

Для DropDownList пытался повесить на valueCommit, получается что в обработчик попадаю тогда когда нужно, но почему то не проходит проверка внутри. Действие выполняется только после того как например убрать фокус в следующий текст ипут.
Думал что может быть это из за того что событие вызывается до того как текст будет удален - повесил в обработчик алерт он показал пустую строку.

Посоветуйте пожалуйста как быть в этой ситуации и как лучше организовать валидацию.

saprahan 30.08.2011 14:55

Ваш компонент на самом деле - чистый ComboBox. Вызов логики валидации стоит повесить на оверрайд сеттеров selectedItem'a и dataProvider'a. Через эвент в роли мидлмэна если желаете

ekonomizer 30.08.2011 16:02

Извините уточните пожалуйста что именно нужно менять в SelectedItem и DataProvider.
Я flexом занимаюсь первую неделю поэтому не оч. соображаю что тут к чему.

Я так понял нужно создать новый класс занаследовать его от компонента Autocompliter. И переопределить в нем два метода set selectedItem и set DataProvider?

И что такое мидлмэн? Не нашел такого свойства у комбобокса.

ekonomizer 30.08.2011 16:26

Да, спасибо! Поставил ComboBox вместо чужой библиотеки, так будет проще.


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

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