“刷新”按钮和树在同一页面中,主要代码如下:
var treeDept = new Ext.tree.TreePanel({
    id:'type-tree',
    animate: true,
    hlColor: "red",    //高亮颜色
    collapsible: true,
    enableDD: true,
    enableDrag: true,
    rootVisible: true,
    autoScroll: true,
    autoHeight: true,
    width:"30%",
    lines:true
});
//根节点
var rootDept = new Ext.tree.TreeNode({
  id: 'rootDept',
  text: '公司组织结构',
  isTarget: false,
  expanded: true
});
treeDept.setRootNode(rootDept);//设置根节点CreateDeptmentTree(treeDept,rootDept,DoEmpRefresh);//************************************************************
//动态创建树的方法********************************************
//************************************************************
var dataModel;
var ds;
var dss;
var rowDatas;//ds的行对象数组
var rowDatass;//dss的行对象数组var rootId = 0;
var rootName = '浙江中旅';
var rootIcon = '';
var nT = '3';//节点级别(即页面树显示的节点级别)function CreateDeptmentTree(treeDept,rootDept,lookMethod)
{
    //ext准备方法开始
    Ext.QuickTips.init();
    //定义存储器,从后台读取json数据 
    ds = new Ext.data.Store({
        baseParams:{method:'LoadDeptmentTree'},
        proxy: new Ext.data.HttpProxy({url:'./DataHandler.ashx',method:"GET"}), // 数据源
        reader:new Ext.data.JsonReader({
            fields:["nodeId","nodeName","parentNodeId","nodeType","leaf","icon"],
            root:"data",
            totalProperty:"totalCount"
        })
    });
 
     ds.load({ params: {PARENTID:0,ENTERPRISEID:getQueryString("ENTERPRISEID")} });
     ds.on('load',function()
     {
        rowDatas = ds.getRange(0,ds.getTotalCount());
        deptTree=createTree(treeDept,rootDept,ds.getCount(),nT);//创建树
        rootDept.expand();
        return deptTree;
     },this);
 
 
    /**
    * 创建树 根据参数节点级别来确定该树的展开深度(即展开到几级节点)
    * @para n:一级节点个数;nT:节点级别
    ************************/
    function createTree(treeDept,rootDept,n,nT)
    {        //循环创建子节点
        for(var i=0;i<n;i++)
        {
            var subNodeId = rowDatas[i].get('nodeId');
            if(subNodeId<=0) continue;
            var subNodeName = rowDatas[i].get('nodeName');
            var nodeType = rowDatas[i].get('nodeType');
            var leaf = rowDatas[i].get('leaf');
            var icon = rowDatas[i].get('icon');
            var sub = addNode(subNodeId,subNodeName,nodeType,leaf,icon);//生成节点
            rootDept.appendChild(sub);//添加到根结点
        }
    }
    /** 树节点构造结束 createTree(n,nT) ***************************/
 
  
    /**
    * 根据id、text创建一个节点
    **/
    function addNode(id,text,nodeType,leaf,icon)
    {
        return new Ext.tree.TreeNode({
             id: id,
             text: text,
             nodeType: nodeType,
             leaf: leaf,
             icon: icon,
             checked : false,
             isTarget: false,//是拖曳的目标
             singleClickExpand: true,
             listeners:
             {
                 "click": function(node)
                 { //监听单击事件
                  myExpand(node,nT);
                  lookMethod(node.id);
                 }
             }
           });
    }
 
    /**
    * 循环创建子节点
    * @param: node:节点对象; rowData: Ext.data.Record[]数组对象
    **/
    function expandNode(node,rowData)
    {
        if(typeof(rowData) != 'undefined')
        {
            for(var j=0; j<rowData.length; j++)
            {
                
                var id = rowData[j].get('nodeId');
                var text = rowData[j].get('nodeName');
                var nodeType = rowData[j].get('nodeType');
                var leaf = rowData[j].get('leaf');
                var icon = rowData[j].get('icon');
                if(text=='') continue;
                var subNode = addNode(id,text,nodeType,leaf,icon);//生成节点
                node.appendChild(subNode);
            }
            node.expand();
        }
    }
    /**
    * 展开节点 -> 根据节点类型判断是否展开该类型节点
    **/
    function myExpand(node,nT)
    {
        var nodeType = -1;//节点的级别
        var leaf = 0;// 0:叶子节点,1:非叶子节点        nodeType = node.attributes.nodeType;
        leaf = node.leaf;        if(nodeType == nT)
        {
            alert("需要添加的函数或事件!");
        }        //节点是否为叶子节点、节点的级别是否当前展开的级别
        if(leaf == 0 || nodeType == nT)
        {
            //alert("该节点下无子节点!");
            return;
        }
        else
        {
          if(node.item(0) == undefined)
          {
            /** 从后台读取该节点下的子节点数据 ***********/
            dss = new Ext.data.Store(
            {
                baseParams:{method:'LoadDeptmentTree'},
                proxy: new Ext.data.HttpProxy({url:'./DataHandler.ashx',method:"GET"}), // 数据源
                reader:new Ext.data.JsonReader({
                    fields:["nodeId","nodeName","parentNodeId","nodeType","leaf","icon"],
                    root:"data",
                    totalProperty:"totalCount"
                })
            });
            dss.removeAll();
            dss.load({
                 params: {PARENTID: node.id,ENTERPRISEID:getQueryString("ENTERPRISEID") },
                 callback: function(records,options,success)
                 {
                      //调用生成二级(及以下)子节点方法
                      if(records.length>0)
                      {
                            expandNode(node,records);
                      }
                 }
            });
          }
        }
    }
}
//递归遍历
function singleSelect(node, sltId)
{  
    if(node.attributes.checked)
    {  
        if(sltId!=node.id)
        {  
            node.ui.toggleCheck(false);
            node.attributes.checked=false;  
        }  
    }  
    if(node.hasChildNodes())
    {
        for(i=0;i<  node.childNodes.length;i++)
        {
            singleSelect(node.childNodes[i], sltId);   
        }
    }
}  
treeDept.on('checkchange', function(node, checked) 
{
    if(checked)
    {
        singleSelect(rootDept,node.id);
    }
}, treeDept);//************************************************************
//主函数******************************************************
//************************************************************Ext.onReady(function(){
    //layout
    var viewport = new Ext.Viewport({
        layout:'border',         
items:[
            {
                region:'west',
    split:true,
    width: 200,
    minSize: 180,
    maxSize: 200,
    margins:'0 0 0 0',
    layout:'fit',
    title:'组织结构列表',
    //“组织结构列表”控制面板
                tbar : [
                    {
                        text : '刷新',
                        id : 'btnDeptmentRefresh',
                        iconCls : 'deptmentfresh',
                        handler : DoDeptmentRefresh
                    },{
                        text : '打开',
                        id : 'btnEdit',
                        iconCls : 'useredit',
                        handler : OpenDeptment
                    },'-',{
                        text : '新增',
                        id : 'btnDelete',
                        iconCls : 'userdelete',
                        handler : NewDeptment
                    },{
                        text :'删除',
                        id : 'btnSet',
                        iconCls :'zhuxiao',
                        handler : DelDeptment
                    }
                ],
    items: [ treeDept  ]
    },
        frmMain//初始标签页
]
});
empStore.load();
});//“刷新”方法
function DoDeptmentRefresh()
{
    //这样写原始树存在
    CreateDeptmentTree(treeDept,rootDept,DoEmpRefresh);
}问:点击时怎么清空原始树;怎么修改DoDeptmentRefresh()

解决方案 »

  1.   

    已解决,自己搞定了
    function DoDeptmentRefresh()
    {
        removeChildrenRecursively(rootDept);
        CreateDeptmentTree(treeDept,rootDept,DoEmpRefresh);
    }
    function removeChildrenRecursively(node) {  
     if (!node) return;  
         while (node.hasChildNodes()) {  
             removeChildrenRecursively(node.firstChild);  
            node.removeChild(node.firstChild);  
        }  
     }