利用Ext Js生成动态树实例代码


Posted in Javascript onSeptember 08, 2008

一. 需求

要求生成一颗部门树,初始只列出根部门
当点击一个部门节点时,动态载入该部门下的直属子部门,并展开该部门节点
部门节点要求支持右键单击事件,当点击右键时,列出相关操作菜单
二. 关键类

这里主要涉及Ext JS的两个类:

Ext.tree.TreeNode
Ext.menu.Menu
相关API可以参考:http://extjs.com/deploy/ext/docs/

三. 代码示例

1. 先看一下测试页面

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Reorder TreePanel</title> 
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" /> 
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script> 
<script type="text/javascript" src="../../ext-all.js"></script> 
<script type="text/javascript" src="reorder.js"></script> 
<!-- Common Styles for the examples --> 
<link rel="stylesheet" type="text/css" href="../shared/examples.css" /> 
<link rel="stylesheet" type="text/css" href="../shared/lib.css" /> 

<script type="text/javascript"> 
/************** 
onload事件 
***************/ 
window.onload=function(){ 
createTree(3); 
} 
</script> 

</head> 
<body> 
<script type="text/javascript" src="../shared/examples.js"></script> 
<h1>现在要生成一颗动态树</h1> 
<div id="container"> 
</div> 
</body> 
</html>

2. 再看一下生成树的函数
/*********************************** 
创建树 
by chb 
************************************/ 
function createTree(n){ 
Ext.QuickTips.init(); 
var mytree=new Ext.tree.TreePanel({ 
el:"container", 
animate:true, 
title:"Extjs动态树", 
collapsible:true, 
enableDD:true, 
enableDrag:true, 
rootVisible:true, 
autoScroll:true, 
autoHeight:true, 
width:"30%", 
lines:true 
}); 
//根节点 
var root=new Ext.tree.TreeNode({ 
id:"root", 
text:"集团公司", 
expanded:true 
}); 

for(var i=0;i<n;i++){ 
var sub1=new Ext.tree.TreeNode({ 
id:i+1, 
text:"子公司"+(i+1), 
singleClickExpand:true, 
listeners:{ 
//监听单击事件 
"click":function(node){ 
myExpand(node); 
}, 
//监听右键 
"contextmenu":function(node,e){ 
//列出右键菜单 
menu=new Ext.menu.Menu([ 
{ 
text:"打开当前节点", 
icon:"list.gif", 
handler:function(){ 
myExpand(node); 
} 
}, 
{ 
text:"编辑当前节点", 
icon:"list.gif", 
handler:function(){ 
alert(node.id); 
} 
}, 
{ 
text:"删除当前节点", 
icon:"list.gif", 
handler:function(){ 
alert(node.id); 
} 
}]); 
//显示在当前位置 
menu.showAt(e.getPoint()); 
} 
} 
}); 
root.appendChild(sub1); 
} 
mytree.setRootNode(root);//设置根节点 
mytree.render();//不要忘记render()下,不然不显示哦 
}

3. 展开子节点的代码
/****************************************** 
展开节点 
******************************************/ 
function myExpand(node){ 
if(node.id=='1'){ 
if(node.item(0)==undefined){ 
node.appendChild(new Ext.tree.TreeNode({ 
id:node.id+'1', 
text:node.text+"的第一个儿子", 
hrefTarget:"mainFrame", 
listeners:{//监听 
"click":function(node,e){ 
expand2(node) 
} 
} 
})); 
} 
node.expand(); 

}else if(node.id=='2'){ 
node.appendChild(new Ext.tree.TreeNode({ 
id:node.id+'2', 
text:node.text+"的第一个儿子", 
hrefTarget:"mainFrame", 
listeners:{//监听 
"click":function(node){ 
expand2(node) 
} 
} 
})); 
}else{ 
alert(node.id+"没有子部门了"); 
} 
}

读者可以自己运行一下如上代码,会发现如下现象:无论点击“子公司1”多少次,只会列出“子公司1的第一个儿子”一个节点,而每点击一次“子公司2”,就会多出一个“子公司2的第一个儿子”节点,这是为什么呢?

因为每次点击都会激发myExpand函数,而“子公司1”上加了node.item(0)==undefined的判断,这里明白了?
即:如果该部门下没有子部门,则载入子部门,否则只展开,不重新载入。

好了,就到这里吧,困了,就不详细解释了o(∩_∩)o...哈哈

Javascript 相关文章推荐
SUN的《AJAX与J2EE》全文译了
Feb 23 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
Feb 16 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
常用的js方法合集
Mar 10 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
Vue 中 a标签上href无法跳转的解决方式
Nov 12 Javascript
javascript实现前端分页效果
Jun 24 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
Sep 08 #Javascript
Javascript条件判断使用小技巧总结
Sep 08 #Javascript
SyntaxHighlighter代码加色使用方法
Sep 07 #Javascript
很多人都是用下面的js刷新站IP和PV
Sep 05 #Javascript
动态修改DOM 里面的 id 属性的弊端分析
Sep 03 #Javascript
IE浏览器PNG图片透明效果代码
Sep 02 #Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 #Javascript
You might like
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
SQL数据库笔试题
2016/03/08 面试题
公交公司毕业生求职信
2014/02/15 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
运动会开幕词
2015/01/28 职场文书
北京青年观后感
2015/06/15 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS