2011-07-20 98 views
1

我正在写一个复合材料部件的基础上,Combobox,做切分自动完成。 的基本思想是,Combobox查询相匹配当前文本的项目模型,当用户从选项中选择的东西呈现它添加到另一个列表标记化呈现。总的来说,它看起来像你可能在Facebook,Apple Mail和其他各种地方看到的输入。ZK组合框ONSELECT事件

我现在的问题似乎从没有真正能够确定什么时候用户已经选择的东西从列表中,而不是干到空有导航上/下使用光标键列表。 Combobox#onSelect似乎触发导航时,在下拉式选项列表下来,我真正需要的是抓住选择的方式,当用户做了“我要这个”动作,通常按与在选择输入下拉菜单或使用鼠标在下拉菜单中手动选择条目。

我到目前为止最好的方法是监测Combobox#onOpen,检查OpenEvent#isOpen是否为假,然后手动检查模型以进行选择。

有没有更好的方式来了解或检测到“我想要这个”场景,并将其与“我希望第三个选项关闭时触发的onSelect事件区分开来,以便我将DOWN,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); 
      } 
     } 
    } 
} 
+0

的方式,选择了很多组件http://books.zkoss.org/wiki/Small_Talks/2011/January/Envisage_ZK_6:_An_Annotation_Based_Composer_For_MVC –

回答

0

它是唯一有印象的还是你真的努力重新实现神采奕奕但对于组合框?

看类描述org.zkoss.zul.Bandbox

好像他们提出来听同一事件的OnOpen。