1

smartgwt ツリー コンポーネントを使用しています。以下のクラスのように、ユーザーツリーに拡張しようとしました:

public UserTree() { 

    final List<NewNode> lista = new ArrayList<NewNode>();
    lista.add(new NewNode(4,"333"));
    setModelType(TreeModelType.PARENT);  
    setIdField("UserViewId");  
    setParentIdField("ReportsTo");  
    setNameProperty("Uzytkownicy");
    zapelnijListeUzytkownikow(lista);
    setRootValue(1);
    setData(userViewData);

    administrationService.zapelnijListeWezlow(token, new AsyncCallback<List<NewNode>>() {
        @Override
        public void onSuccess(List<NewNode> result) {

            zapelnijListeUzytkownikow(result);  
            setData(userViewData);
        }

        @Override
        public void onFailure(Throwable caught) {
            Window.alert("fail");
        }
    };  
}

protected TreeNode[] zapelnijListeUzytkownikow(List<NewNode> result) {

    userViewData = new TreeNode[12];
    /*  userViewData = new TreeNode[result.size() + 4];

    userViewData[0] = new UserViewTreeNode("2", "1", "Administratorzy");
    userViewData[1] = new UserViewTreeNode("3", "1", "Uprzywilejowani");
    userViewData[2] = new UserViewTreeNode("4", "1", "Uzytkownicy");
    userViewData[3] = new UserViewTreeNode("5", "1", "Pozostali");
    int i = 4;
    for(NewNode nn : result) {
       userViewData[i] = new UserViewTreeNode(String.valueOf(nn.getId()), "2", nn.getName());
       i++;
    }*/
    userViewData[0] = new UserViewTreeNode("2", "1", "Administratorzy");
    userViewData[1] = new UserViewTreeNode("3", "1", "Uprzywilejowani");  
    userViewData[2] =new UserViewTreeNode("4", "1", "Uzytkownicy");
    userViewData[3] =new UserViewTreeNode("5", "1", "Pozostali");  
    userViewData[4] = new UserViewTreeNode("18", "2", "Fasola Jan");
    userViewData[5] =new UserViewTreeNode("19", "2", "Puchatek Jakub");
    userViewData[6] =new UserViewTreeNode("20", "3", "Klapouchy");
    userViewData[7] =new UserViewTreeNode("21", "3", "Król Lew");
    userViewData[8] =new UserViewTreeNode("22", "4", "Bolek");
    userViewData[9] =new UserViewTreeNode("23", "4", "Lolek");
    userViewData[10] =new UserViewTreeNode("24", "5", "Gargamel");
    userViewData[11] =new UserViewTreeNode("25", "5", "Ciamajda");

    return userViewData;
}

asyncallback を使用して、データベースからこのツリーにデータを配置します。うまく機能していますが、onSuccess メソッドで setData メソッドを使用したい場合、エラーが発生しました。

「コンポーネントが作成された後、構成プロパティ「データ」を [Lcom.smartgwt.client.widgets.tree.TreeNode;@3c01807 に変更できません。」

作成後にツリーのデータを更新するにはどうすればよいですか? ツリー上のすべての値を消去し、ZapelnijListeWezlow メソッドによって生成された値を配置したい 助けてくれてありがとう!

4

2 に答える 2

1

答えを見つけたと思います。ツリー コンポーネントは読み取り専用です。しかしツリーグリッドはそうではありません。そのため、TreeGrid を UserTreeGrid に拡張することにしました。ツリーを更新するときは常に、次のようにします。

UserTreeView ust = new UserTreeView(); ... ... ... ust.setData(tree) <-- ツリーに新しい値を入れることができないので、新しいデータで新しいツリーを作成し、古いツリーの代わりにここに配置します。

于 2012-10-18T12:06:35.443 に答える
0

「適切な」データソース (クライアント側のもの) なしで作成されたデータバインドされた要素 (TreeGrid や ListGrid など) は、作成時にのみデータをロードできます。あなたが得るメッセージはまさにそれを述べています。別の解決策であり、適切な IMO は、より複雑ですが、SC サーバーに依存しないデータソースを作成することです。したがって、smartgwt ライブラリの LGPL バージョンで動作しますが、GWT のトランスポート メソッド (つまり、GWT-RPC) を利用します。または RequestBuilder. これにより、単純な fetch ( . 1。

于 2012-10-20T13:46:57.837 に答える