`
jia106329
  • 浏览: 62798 次
  • 性别: 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的判断,这里明白了?
即:如果该部门下没有子部门,则载入子部门,否则只展开,不重新载入。
分享到:
评论

相关推荐

    EXT实现动态树的功能

    创建一个动态树的第一步是实例化一个TreePanel,并配置其属性,如根节点、数据源以及节点的渲染样式等。 ```javascript Ext.create('Ext.tree.Panel', { title: '动态树', width: 300, height: 400, store: ...

    ext4 表格分页实例代码

    以下是简单的EXT4表格分页实例代码概述: ```javascript // 数据模型定义 Ext.define('MyApp.model.MyModel', { extend: 'Ext.data.Model', fields: ['id', 'name', 'date'] }); // 数据存储配置 var store = ...

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

    涉及到的版本包括ext-1.1.1和ext-2.0,不同版本间的功能差异较大,导致实例代码及用法有较大变动。在开发过程中,很多示例代码需要依赖服务器环境才能正确执行,这通常涉及到跨域问题或图片等静态资源的路径问题。 ...

    EXT构造动态树 包括增删改操作

    EXT是一个强大的JavaScript库,主要用于构建富客户端应用,尤其在数据可视化和用户界面设计方面...在实践中,结合EXT的API文档和示例代码,可以更好地掌握这些概念和技巧,从而创建出功能强大且用户友好的动态树组件。

    Itext利用模板生成PDF实例demo,导入即可使用,供前台下载,打印,预览等

    这个库在IT行业中广泛应用于生成动态报告、发票、证书等文档,因为它的灵活性和易用性。在这个实例中,我们看到Itext被用来通过模板生成PDF文件,这种做法可以极大地简化PDF内容的构建过程。 **模板驱动的PDF生成**...

    ext grid 导出excel 代码实例

    1. **创建EXT Grid**:首先,你需要创建一个EXT Grid实例,定义列模型、数据源、以及任何其他必要的配置项。例如,你可以使用`Ext.create('Ext.grid.Panel', { ... })`来创建Grid,并设置`columns`,`store`等属性。...

    Ext tree json 动态加载完美实例

    Ext JS提供了`Ext.data.XmlReader`类,用于解析XML数据并转化为JavaScript对象,这些对象可以作为树节点的数据源。我们需要配置XML Reader的`record`属性来指定XML元素的根节点,以及`success`属性来识别成功解析的...

    Ext 根据数据库返回json动态生成grid列表实例

    在"Ext 根据数据库返回json动态生成grid列表实例"中,我们学习了如何使用ExtJS创建一个动态的Grid,它的列和数据都依赖于服务器返回的JSON数据。这个过程包括了Grid的基本配置、数据存储的设定以及如何处理和解析...

    Ext2.2动态生成ColumnModel

    标题“Ext2.2动态生成ColumnModel”涉及的是Ext JS框架的一个特定功能,该框架是用于构建富客户端Web应用程序的JavaScript库。ColumnModel是Ext JS表格组件(GridPanel)的核心部分,它定义了表格列的属性,如字段名...

    javascript的ext综合应用,Ext js 资源大全

    4. **不用写JavaScript的EXT应用**:"一个不用写javascript的ext综合应用-简易java框架- BlogJava.zip"可能是一个简化了JavaScript编程的解决方案,通过Java后端生成Ext JS代码,使得开发者可以更专注于业务逻辑,而...

    ext后台经典实例

    EXT是Sencha公司开发的一款基于JavaScript的前端框架,主要用于构建富客户端应用。它提供了一套完整的组件模型,包括表格、面板、菜单、按钮等,以及强大的数据绑定和布局管理功能,使得开发者能够轻松创建出美观且...

    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 JS的强大功能,构建了一套完整的酒店业务解决方案,覆盖了从预订、入住到退房的全过程,提高了酒店的工作效率,提升了客户满意度。这样的实例对于其他类型的业务也有很高的参考...

    ExtJs动态grid的生成

    - 首先,你需要创建一个Ext.grid.Panel实例,这是ExtJS中的Grid组件。通过设置配置项如store(用于存储数据)、columns(定义列)等来定制Grid。 2. **动态生成列** - 你可以使用`columns`属性来动态生成列。例如...

    Ext Desktop+struts2 实例

    在 "Ext Desktop + Struts2 实例" 中,开发者将 Ext JS 的桌面应用模型与 Struts2 的后端控制和数据处理能力相结合,实现了前后端分离的架构。下面我们将深入探讨这个组合的各个知识点: 1. **Ext JS 桌面应用(Ext...

    ext grid网格控件实例

    在测试EXT Grid实例之前,确保已经下载了EXT JS库文件,包括CSS样式表、JavaScript库和必要的图片资源。EXT Grid的配置涉及很多方面,如列定义、排序、过滤、编辑等,需要根据具体需求进行定制。同时,理解EXT JS的...

    extjs动态生成表格,前台+后台

    6. 动态生成:通过JavaScript代码动态创建ColumnModel和Store,从而实现表格的动态生成。 通过理解和掌握这些知识点,开发者可以构建出高度灵活、响应式的前端表格应用,同时充分利用后端数据源提供动态内容。

    ext操作数据库实例DBExplorer

    在IT领域,EXT是一个流行的JavaScript库,主要用于构建富交互式的Web应用程序。EXT库以其强大的组件模型和丰富的用户界面元素而闻名。"EXT操作数据库实例DBExplorer"是一个利用EXT库开发的数据库管理系统的示例,它...

Global site tag (gtag.js) - Google Analytics