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)...";
    }
});

外部ボタンを使用して値をクリアする(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」を受け入れる必要があります。

4

2 に答える 2

1

すべての FormItem と同様に、event.cancel()は変更を許可しない正しい方法です。これが正しく動作するのを妨げていたフレームワーク レベルのバグがありましたが、現在は修正されています。

Isomorphic フォーラムのこのスレッドを参照してください。

于 2012-05-17T00:01:35.647 に答える
0

あなたが達成しようとしているものとまったく同じではないことは理解していますが、選択した値を読み取り、false と適切なメッセージを返す CustomValidator を定義することを検討できます。が選択されます。これを機能させるには、pickTreeItem.setCanSelectParentItems(Boolean.TRUE) を設定して親アイテムを選択できるようにし、pickTreeItem.setValidateOnChange(Boolean.TRUE) を設定して選択時に選択した値を検証する必要があります。

于 2012-05-05T01:05:11.007 に答える