当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 利用Ext Js生成动态树实例代码

Javascript
JavaScript 复制功能代码 兼容多浏览器
图片与文字半透明效果 鼠标移上不透明
javascript 模拟Marquee文字向左均匀滚动代码
纯CSS 链接悬停提示效果代码
JS、CSS文字切换,定时交替,代码精简
Javascript 仿歌词智能滚动代码
javascript 表单中浏览文件的“浏览”按钮修改
让你的网站可编辑的实现js代码
Javascript var变量隐式声明方法
JS CSS制作饱含热情的镶边文字闪烁特效
Js 实现文字爬楼滚动效果 结合文本框
随日期每天自动变换的文本的js特效
一个链接按两种方式打开两个网址的方法
Js文字背景行如流水特效
让链接必须按先后顺序点击的JS代码
单选按钮决定链接的网址
JavaScript 点击插入文字
获取网站跟路径的javascript代码(站点及虚拟目录)
JS 用6N±1法求素数 实例教程
javascript 添加和移除函数的通用方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 191 ::
收藏到网摘: n/a

今天在公司帮同事写了个用Ext Js生成动态树的Demo,在这里分享一下,也好供以后自己查阅。 一. 需求
要求生成一颗部门树,初始只列出根部门
当点击一个部门节点时,动态载入该部门下的直属子部门,并展开该部门节点
部门节点要求支持右键单击事件,当点击右键时,列出相关操作菜单
二. 关键类
这里主要涉及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...哈哈