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 提供了用户可以在树上使用up, down, Page Up, Page Down, Home,来“移动选择”的功能。此操作还将发送有关新选定项目的选择事件,但不会发送取消选定项目的事件。因此,当用户使用这些键时,以前的代码片段不起作用。End

我的问题是:

  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

这是合乎逻辑的,因为在事件驱动编程中,
每个用户操作只发送一个事件是一种很好的做法。但是您需要的所有信息
都在活动中。在 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;
    }

我使用 javaSet和集合论逻辑来计算Set取消选择的项目。

于 2012-12-27T08:12:20.543 回答