ZK Combobox onSelect events - PullRequest
       13

ZK Combobox onSelect events

1 голос
/ 20 июля 2011

Я пишу составной компонент, основанный на Combobox, для выполнения автозаполнения токенов.Основная идея заключается в том, что Combobox запрашивает модель для элементов, соответствующих текущему тексту, и когда пользователь выбирает что-либо из представленных опций, он добавляется в другой список для представления токенов.В целом это выглядит как входные данные, которые вы, возможно, видели в Facebook, Apple Mail и других местах.

Моя текущая проблема, по-видимому, связана с невозможностью определить, когда пользователь выбрал что-то из списка, каквместо простого перемещения вверх / вниз по списку с помощью клавиш курсора.Combobox#onSelect, кажется, срабатывает при навигации по списку опций в выпадающем списке, и мне действительно нужен способ получить выбор, когда пользователь выполнил действие "Я хочу это", обычно нажимая Enter с выделениемв раскрывающемся списке или вручную выбирая запись в раскрывающемся списке с помощью мыши.

Лучшее, что я до сих пор придумал, - это мониторинг Combobox#onOpen, проверка, ложно ли OpenEvent#isOpen, и затемосмотрите модель для выбора вручную.

Есть ли лучший способ узнать или обнаружить сценарий "Я хочу этот" и отличить его от событий onSelect, инициированных во время "Я хочу третий"?опцию вниз, так что я буду ВНИЗ, ВНИЗ, ВНИЗ + ВВОД "?

Код ниже в основном то, что я сейчас смотрю

public void onOpen$input(OpenEvent oe) {
    logger.info("OpenEvent.isOpen: {}", oe.isOpen());

    if (oe.isOpen() == false) {
        ListModel model = this.input.getModel();
        logger.info("model: {}", model);

        if (model instanceof Selectable) {
            logger.info("model is Selectable");
            Set<?> selection = ((Selectable) model).getSelection();
            logger.info("selection: {}", selection);
            for (Object selected : selection) {
                logger.info("selected: {}", selected);
                if (selected instanceof Comboitem) {
                    logger.info("selected is Comboitem");
                    selected = ((Comboitem) selected).getValue();
                    logger.info("selected: {}", selected);
                }

                addToken(selected);
            }
        }
    }
}

1 Ответ

0 голосов
/ 23 октября 2011

Это только впечатление или вы действительно пытаетесь переопределить Bandbox, но для Combobox?

Посмотрите на описание класса для org.zkoss.zul.Bandbox

Похоже, они предлагают прослушать одно и то же событие onOpen.

...