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

 更新时间:2008年09月08日 21:41:28   作者:  
今天在公司帮同事写了个用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...哈哈

相关文章

  • JavaScript中this机制是如何真正工作的

    JavaScript中this机制是如何真正工作的

    JavaScript中this机制提供了更优雅的方式来隐含地“传递”一个对象引用,导致更加干净的API设计和更容易的复用,this既不是函数自身的引用,也不是函数词法作用域的引用,this实际上是在函数被调用时建立的一个绑定,它指向什么是完全由函数被调用的调用点来决定的
    2023-11-11
  • JS动态给对象添加属性和值的实现方法

    JS动态给对象添加属性和值的实现方法

    下面小编就为大家带来一篇JS动态给对象添加属性和值的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • echarts展示区域地图添加纹理图片操作指南

    echarts展示区域地图添加纹理图片操作指南

    这篇文章主要给大家介绍了关于echarts展示区域地图添加纹理图片操作的相关资料,ECharts地图组件支持使用图片作为地图区域的填充纹理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  •  javascript数组中的lastIndexOf方法

     javascript数组中的lastIndexOf方法

    这篇文章主要介绍了 javascript数组中的lastIndexOf方法,该方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索,下文详细内容需要的小伙伴可以参考一下
    2022-03-03
  • 原生JS实现百叶窗特效

    原生JS实现百叶窗特效

    这篇文章主要为大家详细介绍了原生JS实现百叶窗特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • zTree获取当前节点的下一级子节点数实例

    zTree获取当前节点的下一级子节点数实例

    下面小编就为大家带来一篇zTree获取当前节点的下一级子节点数实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 可视化埋点平台元素曝光采集intersectionObserver思路实践

    可视化埋点平台元素曝光采集intersectionObserver思路实践

    这篇文章主要为大家介绍了可视化埋点平台元素曝光采集的思路—intersectionObserver的实战经验详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • JS 获取页面尺寸的方法详解

    JS 获取页面尺寸的方法详解

    通过 JS 获取页面相关的尺寸是比较常见的操作,尤其是在动态计算页面布局时,今天我们就来学习一下几个获取页面尺寸的基本方法,需要的朋友可以参考下
    2023-09-09
  • javascript正则表达式基础知识入门

    javascript正则表达式基础知识入门

    很长时间没看正则表达式了,碰巧今天用到,温故知新了一把,这里记录下来,分享给大家,都是些基础的知识,重点给大家讲解的是正则表达式中4种常用的方法,50% 的举一反三练习中的原创。
    2015-04-04
  • JavaScript canvas实现九宫格切图效果

    JavaScript canvas实现九宫格切图效果

    这篇文章主要为大家详细介绍了JavaScript canvas实现九宫格切图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论