2011-07-20 11 views
1

Comboboxに基づいて複合コンポーネントを作成して、トークン化されたオートコンプリートを行っています。 基本的な考え方は、Comboboxが現在のテキストと一致する項目をモデルに照会し、ユーザーが提示されたオプションから何かを選択すると、トークン化されたプレゼンテーションの別のリストに追加されるということです。全体的に見ると、あなたはFacebook、Apple Mail、その他のさまざまな場所で見たことがあるようです。ZK Combobox onSelectイベント

私の現在の問題は、単にカーソルキーを使用してリストを上下にナビゲートしたのではなく、ユーザーがリストから何かを選択したかを実際に判別できないことによると思われます。 Combobox#onSelectは、ドロップダウンのオプションのリストをナビゲートするときにトリガされたように見えます。本当に必要なのは、ユーザが「これを欲しい」アクションを実行したときに選択を取得する方法です。マウスを使用してドロップダウン内の項目を手動で選択することができます。

これまでのところ、Combobox#onOpenを監視し、OpenEvent#isOpenが偽であるかどうかを確認して、手動でモデルを検査して選択するようにしました。

"私はこの1つを必要とする"シナリオを認識して検出し、 "私は3番目のオプションが欲しいので、私はダウン、ダウン、ダウンします"の間にトリガされたonSelectイベントから区別するための良い方法がありますか? + 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

で探しているものを基本的にそれだけで感動したり、本当にbandboxのを再実装しようとするが、コンボボックスのためですか?彼らは同じイベント開く時に耳を傾けることを提案するようorg.zkoss.zul.Bandbox

のクラスの説明で

ルック思えます。

関連する問題