“刷新”按钮和树在同一页面中,主要代码如下:
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()
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()
function DoDeptmentRefresh()
{
removeChildrenRecursively(rootDept);
CreateDeptmentTree(treeDept,rootDept,DoEmpRefresh);
}
function removeChildrenRecursively(node) {
if (!node) return;
while (node.hasChildNodes()) {
removeChildrenRecursively(node.firstChild);
node.removeChild(node.firstChild);
}
}