0

我正在尝试清除IPickTreeItem上用户选择的值。

这是我发现限制用户选择某些树根值(不是全部)的唯一解决方案。

更清楚地说,似乎调用 event.cancel() 并不能阻止事件冒泡。

难道我做错了什么 ?

TreeNode treenode = new TreeNode("root", new TreeNode("Operation A"),
new TreeNode("Operation B"));

final DynamicForm dynamicForm = new DynamicForm();

Tree tree = new Tree();
tree.setRoot(treenode);

final IPickTreeItem pickTreeItem = new IPickTreeItem();
pickTreeItem.setValueTree(tree);
pickTreeItem.addChangeHandler(new ChangeHandler()
{
    @Override
    public void onChange(ChangeEvent event)
    {
        pickTreeItem.clearValue() // Not clearing the value
        pickTreeItem.setValue((String)null) // Not working neither
        event.cancel() // Not seeming to work...
    }
});

dynamicForm.setItems(pickTreeItem);
dynamicForm.draw();

这也不起作用

pickTreeItem.setInputTransformer(new FormItemInputTransformer()
{

    @Override
    public Object transformInput(DynamicForm form, FormItem item,
    Object value, Object oldValue)
    {
        return "Desired New Value (not working)...";
    }
});

这很奇怪,因为它使用外部 Button 来清除值(在 picktreeitem 处理程序之外)

Button bt = new Button("click");
bt.addClickHandler(new ClickHandler()
{
    @Override
    public void onClick(ClickEvent event)
    {
        pickTreeItem.setValue((Object) null);
    }
});

预期行为

我的树:

-aaaa
----bbbb
----cccc
-dddd
----eeee
----ffff

如果用户选择“aaaa”,则 PickTreeItem 值应恢复为默认值(“选择一个值”),可选择通知用户他不能选择“aaaa”。

PickTreeItem 应该接受“dddd”作为有效的选择值。

4

2 回答 2

1

与所有 FormItems 一样,event.cancel()是禁止更改的正确方法。有一个框架级别的错误阻止了它的正确行为,现在已经更正了。

在同构论坛上查看此线程

于 2012-05-17T00:01:35.647 回答
0

我知道这与您要实现的目标不完全相同,但您可以考虑定义一个 CustomValidator,它读取选定的值并返回 false 和适当的消息,当父值之一不应该是时,被选中。为此,您必须设置 pickTreeItem.setCanSelectParentItems(Boolean.TRUE) 以允许选择父项,并设置 pickTreeItem.setValidateOnChange(Boolean.TRUE) 以在选择时验证所选值。

于 2012-05-05T01:05:11.007 回答