ZK Combobox onSelect活动

时间:2011-07-20 07:24:28

标签: java zk

我正在编写一个基于Combobox的复合组件来进行标记化自动完成。 基本思想是Combobox向模型查询与当前文本匹配的项目,当用户从显示的选项中选择某些内容时,它会添加到另一个列表中以进行标记化表示。总的来说,它看起来像你在Facebook,Apple Mail和其他各个地方看到的输入。

我当前的问题似乎源于无法确定用户何时从列表中选择了某些内容,而不是仅使用光标键在列表中向上/向下导航。在下拉列表中导航选项列表时似乎会触发Combobox#onSelect,而我真正需要的是在用户完成“我想要这个”操作时抓取选择的方法,通常按Enter键下拉列表中的选择,或使用鼠标在下拉列表中手动选择一个条目。

我迄今为止所做的最好的事情是监控Combobox#onOpen,检查OpenEvent#isOpen是否为假,然后手动检查模型以供选择。

是否有更好的方法来了解或检测“我想要这个”场景,并将其与“我希望第三个选项关闭时触发的onSelect事件区分开来,这样我就会向下, DOWN,DOWN + ENTER“?

以下代码基本上就是我现在正在看的代码

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 :(得分:0)

这只是印象还是你真的尝试重新实现Bandbox但是对于Combobox?

查看org.zkoss.zul.Bandbox

的班级说明

似乎他们打算在onOpen上听同一个事件。