Extjs:加载树的动态数据

时间:2011-03-11 00:36:40

标签: extjs tree

我是Extjs的新手,我想将数据动态加载到树中。服务器返回数据,这不是json格式,即数据结构几乎搞砸了。我应该在代码中指定什么URL以及如何处理数据格式。在查看服务器返回的数据时,无法区分父级和子级。我正在尝试根据以下代码构建一个树...

Ext.onReady(function() {

    var Tree = Ext.tree;

    var tree = new Tree.TreePanel({
        useArrows: true,
        autoScroll: true,
        animate: true,
        enableDD: true,
        containerScroll: true,
        border: false,
        // auto create TreeLoader
        dataUrl:'????????????????????',
        root: {
            nodeType: 'async',
            text: 'ALL',
            draggable: false,
            id: ''
        }
    });

    // render the tree
    tree.render('tree-div');
    tree.getRootNode().expand();
}); 

2 个答案:

答案 0 :(得分:1)

传递dataUrl配置选项时,您告诉Tree Component使用默认的TreeLoader,它只接受JS数组(JSON)作为服务器的输出。如果您从服务器传递其他数据,无论是XML,YAML还是其他像您所说的mumbojumbo,您将必须编写自己的TreeLoader。

首先查看Ext.tree.Treeloadersource of TreeLoader上的文档,这可能会让您了解编写自己的Loader以接受服务器输出所需要做的事情。

答案 1 :(得分:0)

直接将json对象添加到树中.....

Java代码:

        for (Object object : objJSONArray) {
            i++;

            JSONObject jsobject = (JSONObject) object;
            if (i == 1) {

                treedata = jsobject;
                System.out.println("  rootnode is:::" + treedata);
            } else {
                String nodeparent = jsobject.getString("NODE_PARENT");
                String parentId = treedata.get("ID").toString();

                if (nodeparent.equals(parentId)) {
                    treedata.put("children", jsobject);
                    System.out.println("treedata  " + treedata);
                } else {
                    Set jsonKeys = treedata.keySet();
                    Iterator itr = jsonKeys.iterator();
                    while (itr.hasNext()) {
                        String keys = itr.next().toString();
                        Object keyObject = treedata.get(keys);
                        if (keyObject instanceof JSONObject) {
                            JSONObject jso = treedata.getJSONObject(keys);
                            String childParentID = jso.getString("ID");
                            if (childParentID.equals(nodeparent)) {
                                jso.put("children", jsobject);
                                treedata.put(keys, jso);
                            }
                        }
                    }
                }
            }
        }