1

ZK 6.5.1 を使用しています。

ツリーには、ユーザーがアイテムを選択/選択解除したときに行うことなど、いくつかのロジックが含まれる場合があります。これは、このようなイベントをリッスンすることで簡単に実行できます。

@Listen("onSelect = #tree")
public void onSelect(SelectEvent<Treeitem, String> event) {
    Treeitem ref = event.getReference();
    if (ref.isSelected()) {
        // do things when item is selected
    } else {
        // do things when item is deselected
    }
}

一方、ZK はユーザーがツリー上で、 、updownPage Up使用して「選択範囲を移動」できる機能を提供します。このアクションは、新しく選択されたアイテムに関する選択イベントも送信しますが、選択解除されたアイテムのイベントは送信しません。したがって、ユーザーがこれらのキーを使用すると、以前のコード スニペットは機能しません。Page DownHomeEnd

私の質問は次のとおりです。

  1. ユーザーが「選択を移動」したときにどのアイテムが選択解除されているかを正確に知るにはどうすればよいですか?
  2. そうでない場合、これらのキーを無効にすることはできますか?

誰かが知りたい場合のSSCCEの例を次に示します。またはZKFiddleで

作曲 :

public class TestComposer extends SelectorComposer<Div> {

    @Listen("onSelect = #tree")
    public void onSelect(SelectEvent<Treeitem, String> event) {
        Treeitem ref = event.getReference();
        if (ref.isSelected()) {
            Clients.log("Selected " + ref.getLabel());
        } else {
            Clients.log("Deselected " + ref.getLabel());
        }
    }
}

ズル:

<div apply="mytest.TestComposer">
    <tree id="tree" multiple="true" checkmark="true">
        <treechildren>
            <treeitem label="A" />
            <treeitem label="B" />
            <treeitem label="C" />
        </treechildren>
    </tree>
</div>
4

1 に答える 1

2

これは論理的です。イベント ドリブン プログラミングでは
、ユーザー アクションごとに 1 つのイベントのみを送信することをお勧めします。しかし、必要な情報はすべて
イベント内にあります。ここで zk fiddle の例をどのように改善したかを
参照してください。 イベント メソッドに数行追加するだけです。

@Listen("onSelect = #tree")
    public void onSelect(SelectEvent<Treeitem, String> event) {
        Treeitem ref = event.getReference();
        Set<Treeitem> newSelection = new HashSet<Treeitem>(event.getSelectedItems());
        if (ref.isSelected()) {
            if (selected != null) {
                Set<Treeitem> deselected = new HashSet<Treeitem>(selected);
                deselected.removeAll(newSelection);
                for (Treeitem t : deselected) {
                    Clients.log("Deselected " + t.getLabel());
                }
            }
            Clients.log("Selected " + ref.getLabel());
        } else {
            Clients.log("Deselected " + ref.getLabel());
        }
        selected = newSelection;
    }

Javaと集合論的ロジックを使用して、選択解除された項目Setを計算します。Set

于 2012-12-27T08:12:20.543 に答える