我正在尝试清除 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)...";
}
});
这很奇怪,因为使用外部按钮清除值(在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值恢复为defaultValue(“选择值”),可选择通知用户他不能选择“aaaa”。
PickTreeItem应接受“dddd”作为有效的选择值。
答案 0 :(得分:1)
与所有FormItems一样, event.cancel()是禁止更改的正确方法。有一个框架级别的错误阻止了这种行为正确,现在已经得到纠正。
答案 1 :(得分:0)
我理解它与您要实现的目标不完全相同,但是您可以考虑定义一个CustomValidator,它读取所选值并返回false和适当的消息,当其中一个父值不应该'被选中。为此,您必须设置pickTreeItem.setCanSelectParentItems(Boolean.TRUE),以允许选择父项,并选择pickTreeItem.setValidateOnChange(Boolean.TRUE),以便在选择时验证所选值。