利用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 相关文章推荐
jquery判断单个复选框是否被选中的代码
Sep 03 Javascript
可以用来调试JavaScript错误的解决方案
Aug 07 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
Feb 11 Javascript
js toFixed()方法的重写实现精度的统一
Mar 06 Javascript
jQuery获取checkbox选中的值
Jan 28 Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 Javascript
JavaScript实现电灯开关小案例
Mar 30 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 mysql事务问题实例分析
2016/01/18 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
解决python replace函数替换无效问题
2020/01/18 Python
快速查找Python安装路径方法
2020/02/06 Python
树莓派升级python的具体步骤
2020/07/05 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
环保倡议书格式范文
2014/05/14 职场文书
中学生运动会广播稿
2015/08/19 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
初中生物教学反思
2016/02/20 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers