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);
}
}
}
}
多くのコンポーネントを選択する方法http://books.zkoss.org/wiki/Small_Talks/2011/January/Envisage_ZK_6:_An_Annotation_Based_Composer_For_MVC –