extjs 一个可以把数据建成树形的方法

makeTreeData:function(root){
                    var me=this,recordName=this.record,data=[],node,length,i ;
                    function getTree(records,id){
                        var c=[];
                        Ext.Array.forEach(records,function(item,index,array){
                            if(item["ParentId"]==id){
                                item[me.root]=getTree(records,item["TemplateId"]);
                                c.push(item);
                            }
                        });
                        return c;
                    }


                    data=root;
                    for(i=0;i<data.length;i++){
                       // if(me.nodeDefault)
                            Ext.apply(data[i],{
                                leaf:!data[i]["IsFolder"]
                            });
                    }
                     var recs=getTree(data, me.rootId);
                    return recs;
                }

这个方法的关键地方是getTree方法递归调用,根据parentId和id相同,最终形成一个用root【children】变量替代的树形数据,然后可以用于treegrid中

有了这个方法我们平时测试静态数据时候可以很方便创建一个tree类型的store

 var treestore= Ext.create("Ext.data.TreeStore",{
                model:"SuitModel"
                ,root:{
                    name:"all"
                    ,Description:"root"
                    ,TemplateId:0
                    ,children:treeData
                    ,expand:true
                }
            });

此处的treeData就是上面的makeTreeData产生的。good,收起!