`
jia106329
  • 浏览: 60990 次
  • 性别: Icon_minigender_2
  • 来自: tj
社区版块
存档分类
最新评论

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

    博客分类:
  • js
阅读更多
转自http://www.jb51.net/article/15754.htm

一. 需求
要求生成一颗部门树,初始只列出根部门
当点击一个部门节点时,动态载入该部门下的直属子部门,并展开该部门节点
部门节点要求支持右键单击事件,当点击右键时,列出相关操作菜单
二. 关键类
这里主要涉及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的判断,这里明白了?
即:如果该部门下没有子部门,则载入子部门,否则只展开,不重新载入。
分享到:
评论

相关推荐

    jsp+ext4(js部分由Ext Designer生成)

    1.Ext Designer生成的代码,如何使用;通过实例化来使用。 2.Ext 的model,store,grid使用,store如何接收json数据 3.form.Panel的分离,如何引用。 4.Ext.define的命名包含了namespace。 *本例子是简单的实现了一下...

    EXT教程EXT用大量的实例演示Ext实例

    只为了树也要学ext。 3.1. 真的,我是为了树,才开始学ext的。 3.2. 传统是先做出一棵树来。 3.3. 超越一个根 3.4. 你不会认为2.0里跟1.x是一样的吧? 3.5. 这种装配树节点的形式,真是让人头大。 3.6. jsp的...

    Ext Js权威指南(.zip.001

    Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...

    代码生成器Mgicode生成器JAVA代码生成器

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码、生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后...

    Migcode代码生成器使用说明书

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    EXTJS4 MVC+ASP.NET MVC3动态加载JS文件实例

    本例采用ASP.NET MVC3 +EXTJS4 MVC 框架,完美实现了EXTJS4动态加载JS文件,对ASP.NET MVC3及EXTJS4 MVC 各应用要点进行了应用。对于想采用ASP.NET MVC3 +EXTJS4 MVC 框架的学习者有很好的帮助,快速掌握MVC框架,本...

    Mgicode代码生成器

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    EXT风格PHP饼状图统计图表实例.zip

    一款EXT风格PHP饼状图统计图表插件,PHP结合JS插件实现的圆形饼状图实例,这个源码主要是演示了PHP如何调用该插件,以及参数设置方面的问题。运用了PHP、XML、Flash、Js等多种技术相结合,生成的效果也是相当不错的...

    Mgicode 代码生成器SSH模板

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 根据数据模型(如数据库、PDM等)可以生成直接运行的SSH项目,初始化数据库数据等。在当前的模板中生成完善的CRUD操作,生成验证,根据不同的类型生成...

    ExtJs实现进度条实例

    ExtJs实现进度条实例,供大家一起参考学习。

    JS随机生成不重复数据的实例方法

    昨天晚上在IBM上看了一篇关于在Java开发人员对于...代码如下:Javascript代码 代码如下:// 定义存放生成随机数的数组 var array=new Array(); // 循环N次生成随机数 for(var i = 0 ; ; i++){ // 只生成10个随机数

    ExtJS4.2源码+实例

    这是一款比较实用的前端开发框架,里面功能齐全,自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染等。

    EXTJS 3.0中文版文档+实例

    自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。 再加上可编辑grid,添加新行,删除一或多行,提示多行数据,拖拽改变...

    一款EXT风格的PHP统计图表插件

    一款EXT风格的PHP圆饼图表插件,PHP结合JS插件实现的圆形饼图实例,这个源码主要是演示了PHP如何调用该插件,以及参数设置方面的问题。运用了PHP、XML、Flash、Js等多种技术相结合,生成的效果也是相当不错的。 配置...

    MockData:用于Ext JS和Sencha Touch的MockData Cmd软件包

    尽管您可以删除此应用程序不使用的某些文件和文件夹,但是在决定可以删除哪些内容以及将哪些内容保留在源代码管理中之前,请务必先阅读以下内容。 以下文件都是构建和加载应用程序所必需的。 "app.json" -应用程序...

    ExtAspNet_v2.3.2_dll

    -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,...

    HiPrint Demo

    hiprint 是一个web 打印的js组件,无需安装软件。支持windows,macOS,linux 系统,支持移动端,PC端浏览器,angular,vue,react 等 分页预览,打印,操作简单,运行快速。预览界面为css+html 。支持数据分组,批量预览...

    grunt-extjs:Grunt 的 ExtJS 路径和​​依赖项生成器

    grunt-extjs v0.1.3 生成 ExtJS 路径和​​依赖项。入门这个插件需要 Grunt ~0.4.0 如果您以前没有使用过 ,请务必查看指南... 然后您的 ExtJS 应用程序将被生成(即由 Node 实例化)以通过Ext.Loader查找您的所有依赖E

Global site tag (gtag.js) - Google Analytics