在应用程序中,我们经常需要显示或处理树状结构的对象信息,比如部门信息和地区信息,树是一种非常典型的数据结构,这些信息都可以用树来表示。对于传统的HTML页面来说,完全依靠手动编码来实现树是比较困难的,因为需要写很多的JS代码,对基于AJAX异步加载来说尤其如此,不但涉及AJAX数据异步加载,还需要考虑跨浏览器支持,处理起来非常麻烦,EXT中提供了现成的树控件,通过这些控件,可以在B/S应用中快速开发出包含树形信息结构的应用。
本文就是详细介绍树形结构的使用过程和实例。
一、创建一棵树
树控件由Ext.tree.TreePanel类定义,控件的名称为TreePanel,TreePanel类继承自Panel面板,在EXT中使用树控件非常简单,我们先来看一下代码(包含配置信息)。
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head id="Head1" runat="server">
- <title>简单的树形</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"><!--
- Ext.onReady(function(){
- var tree=new Ext.tree.TreePanel({
- el:'tree'
- });
- var root=new Ext.tree.TreeNode({text:'我是根'});
- tree.setRootNode(root);
- tree.render();
- });
- </script>
- </head>
- <body>
- <div id="tree"></div>
- </body>
- </html>
这里的参数tree表示渲染的DOM的id.HTML中应该要要有<div id="tree"></div>相对应,最后这棵树就出现在这个div的位置上。
在获得了树形面板后,就必须要设置根,因为必须有了根才可以生长枝节,最后生成完整的树,所以根是必须的。具体实现的效果如图1所示。
图1 只有根的树
二、为树生枝展叶
上面的实例代码生成一棵没有根的树,下面的代码就为树添加枝和叶,代码清单如下:
- <script type="text/javascript">
- Ext.onReady(function(){
- var tree=new Ext.tree.TreePanel({
- el:'tree',
- autoHeight:true
- });
- var root=new Ext.tree.TreeNode({text:'区域信息'});
- var node1=new Ext.tree.TreeNode({text:'湖南省'});
- var node3=new Ext.tree.TreeNode({text:'广东省'});
- var node2=new Ext.tree.TreeNode({text:'广州市'});
- node3.appendChild(node2);
- root.appendChild(node1);
- root.appendChild(node3);
- tree.setRootNode(root);
- tree.render();
- });
- </script>
效果图如图2所示:
图2 完整的树控件
注意:我们一方面可以通过修改<div id="tree" style="height:300px;"></div>来设置div高度;同时也可以设置treePanel的 autoHeight属性为tree,则可以自动计算高度,否则展开的树形控件看不到枝叶。
三、使用TreeLoader获得数据
使用上面的录入方式来获取数据不仅麻烦,而且还容易出错,Ext.tree.TreeLoader可以利用从后台获取的数据为我们组装出一棵树来,我们只需要提供数据,让treeLoader完成数据转换和装配节点的操作。
(1)我们要为TreePanel配置一个TreeLoader,如下面代码所示:
- var tree=new Ext.tree.TreePanel({
- el:'tree',
- loader:new Ext.tree.TreeLoader({dataUrl:'data.txt'}),
- autoHeight:true
- });
(2)这里的TreeLoader仅包含一个参数{dataUrl:'data.txt'},这个dataUrl表示在树完成渲染后从何处读取数据。data.txt内容如下:
- [
- {text:'not leaf'},
- {text:'is leaf',leaf:true}
- ]
(3) 现在查看页面依然只能看到根,没有读取数据并显示到页面上,因为我们使用的TreeNode不支持Ajax,我们需要将其改成 AsyncTreeNode,这样才可以实现我们想要的异步加载效果,如下面的代码所示:
- var root=new Ext.tree.AsyncTreeNode({text:'区域信息'});
注意:必须将root.expand(true,true)修改成root.expand()避免无限循环展开树枝。
四、读取本地JSON数据
读取本地JSON其实是一种是用使用TreeLoader的另类方法。因为有时候树形的数据并不多,为了获取少量的数据而是用AJAX访问后台实在不划算。首先为TreePanel设置一个参数为空的TreeLoader,如下面代码所示:
- var tree=new Ext.tree.TreePanel({
- el:'tree',
- loader:new Ext.tree.TreeLoader(),
- autoHeight:true
- });
然后,设置一个根节点,并为这个根节点设置children属性,如下面代码所示:
- var root=new Ext.tree.AsyncTreeNode({
- text:'我是根',
- children:[
- {text:'Leaf No.1',leaf:true},
- {text:'Leaf No.1',leaf:true}
- ]
- });
- tree.setRootNode(root);
这里需要注意几点:
(1) 必须设置TreeLoader,否则根节点会一直处于在读取状态,无法获得children中定义的子节点
(2) 根节点必须是AsyncTreeNode,如果是TreeNode,也无法生成子节点
(3) 子节点中的叶子节点必须都加上leaf:true,否则会一直显示读取状态。
五、右键菜单
树形弹出的右键菜单效果图如图3所示:
图3 右键菜单效果
具体实现步骤如下:
(1) 制作自定义菜单,如下面的代码所示:
- var contextmenu=new Ext.menu.Menu({
- id:'theContextMenu',
- items:[{
- text:'点击',
- handler:function(){
- alert(' 我被点中了');
- }
- }]
- });
(2) 绑定contextmenu时间,如下面代码所示:
- tree.on("contextmenu",function(node,e){
- e.preventDefault();
- node.select();
- contextmenu.showAt(e.getXY());
- });
六、修改节点的默认图标
实际上,每个树形节点都有icon和iconCls属性,他们负责制定节点的图标,现在我们来修改树种节点的图标,无论是通过new手工创建的节点,还是通过JSON读取到的节点,设置方式都是一样,如下面代码所示:
- var root1=new Ext.tree.TreeNode({
- text:'icon',
- icon:'user_female.png'
- });
七、从节点弹出对话框
下面的代码可以让对话框看起来像是从标题上飞出来的:
- tree.on("click",function(node){
- Ext.Msg.show({
- title:'提示',
- msg:"你单击了"+node,
- animEl:node.ui.textNode
- });
- });
八、节点提示信息
当我们把鼠标停留在某个节点的上方时,便会出现提示信息,为了实现这种效果,我们需要对提供的JSON数据做一些修改,在JSON中添加对应的节点提示信息,我们给每个节点数据都加上qtip:'xxx'参数,这个节点就可以显示提示信息了。
不过,仅仅为JSON添加这个参数还不能在页面上显示提示信息,需要先在JS中对EXT的提示功能进行初始化。
- Ext.QuickTips.init();//开启提示功能
上面这行代码必须在其他功能加载前完成,建议写在onReady函数的第一行。具体代码如下:
- <script type="text/javascript">
- Ext.onReady(function(){
- Ext.QuickTips.init();
- var tree=new Ext.tree.TreePanel({
- el:'tree',
- loader:new Ext.tree.TreeLoader(),
- autoHeight:true
- });
- var root=new Ext.tree.AsyncTreeNode({
- text:'我是根',
- children:[
- {text:'Leaf No.1',qtip:'No1',leaf:true},
- {text:'Leaf No.1',qtip:'No2',leaf:true}
- ]
- });
- var root1=new Ext.tree.TreeNode({
- text:'icon',
- icon:'user_female.png'
- });
- tree.setRootNode(root);
- //root.expand(true,true);
- var contextmenu=new Ext.menu.Menu({
- id:'theContextMenu',
- items:[{
- text:'点击',
- handler:function(){
- alert('我被点中了');
- }
- }]
- });
- tree.on("contextmenu",function(node,e){
- e.preventDefault();
- node.select();
- contextmenu.showAt(e.getXY());
- });
- tree.on("click",function(node){
- Ext.Msg.show({
- title:'提示',
- msg:"你单击了"+node,
- animEl:node.ui.textNode
- });
- });
- tree.render();
- });
- </script>
九、为节点设置超链接
虽然我们完全可以监听click事件,但是直接在节点树形中设置超链接的地址也是一个好主意,这是很多人想实现的功能,具体的代码如下:
- var root=new Ext.tree.AsyncTreeNode({
- text:'我是根',
- children:[
- {text:'新浪网',qtip:'新浪网 ',leaf:true,href:'http://www.sina.com.cn'},
- {text:'百度中国',qtip:'搜索引擎',leaf:true,href:'http://www.baidu.cn',hrefTarget:'_blank'}
- ]
- });
相关推荐
此外,ExtJS还包括其他多种UI组件,如按钮、表单、菜单、工具提示、树形视图、图表等,覆盖了日常Web应用开发的大部分需求。这些组件都有丰富的样式和配置选项,可以轻松实现自定义设计,以满足不同项目的需求。 ...
这篇博客文章"Extjs--DWR做的动态树"可能探讨了如何利用这两者结合来创建动态的树形数据结构,这种结构在很多Web应用中用于展示层次化的信息,比如文件系统、组织结构或导航菜单。 动态树在Web应用中是交互式的,...
1. **ExtJS**: ExtJS 提供了一个完整的MVC(模型-视图-控制器)架构,包含了大量的可重用UI组件,如表格、树形视图、图表、窗体等。它还支持数据绑定、Ajax通信、拖放操作等特性,使开发者能够创建功能丰富的桌面级...
在压缩包中的"ExtTreeTab"可能表示一个包含树形结构和选项卡功能的组件。在用户列表实例中,它可能被用来展示用户组或者层级关系的用户。树形结构用于显示层次关系,而选项卡则可以用来分类或分组用户。 总结起来,...
EXTJS的动态树(TreePanel)组件允许开发者创建可交互的树形结构,这些结构可以动态地加载数据。树节点可以包含子节点,可以展开或折叠,支持拖放操作,非常适合用来展示层次化的信息,如目录结构、组织架构等。动态...
EasyUI 和 ExtJS 都提供了强大的组件库来帮助开发者构建动态树形结构。这两个框架都具有丰富的功能和良好的可定制性,使得创建复杂的交互式树形结构变得相对简单。 首先,让我们深入了解一下 EasyUI。EasyUI 是一个...
ExtJS Tree是一个强大的JavaScript库,专门用于创建交互式的树形结构。这个"extjs-tree.zip"文件包含了使用Java编写的ExtJS异步树形控件的示例代码,旨在帮助开发者快速理解和应用这一功能。ExtJS是Sencha公司开发的...
2. **拖放操作**:允许用户通过拖放操作来重新组织树形结构,或者在树形表格中移动数据。 3. **嵌套网格**:可能实现了每个树节点都可以展开为一个独立的表格,展示更详细的信息。 4. **性能优化**:可能针对大数据...
综上所述,ExtJs树形结构提供了一种直观且灵活的方式来展示和操作层次化数据,通过理解和掌握其基本用法和扩展功能,开发者可以构建出满足各种需求的树形界面。在项目中,可以结合具体业务需求,进行个性化定制,...
1. **ExtJS框架**:ExtJS是一个基于组件的JavaScript库,提供了丰富的用户界面组件,如表格、树形视图、图表、表单等。它的设计目标是提高Web应用的交互性和用户体验,同时简化前端开发的复杂性。框架内包含了数据...
其中,下拉树列表是一种非常实用且常见的控件类型,它结合了下拉列表的便捷性和树形结构的强大组织能力。本文将详细介绍一个基于Extjs框架的“多功能下拉树列表”组件的功能特点及其使用方法。 #### 二、核心功能...
在EXTJS中,树形结构(Tree)是一种用于展示层级数据的组件,它允许用户以图形化的方式浏览和操作层次关系。以下是对标题和描述中所述EXTJS实现简单树状结构的知识点的详细说明: 1. **Ext.onReady**:这是EXTJS...
extjs 树形下拉列表框,可以进行数据选择,数据回显。
它支持现代浏览器,包括IE8+,并且提供了一套完整的组件库,如表格、面板、窗口、树形视图等,以及数据绑定和模型层,使得开发响应式和数据驱动的应用变得简单。 2. **ux 插件** - `ux`目录下的插件是社区贡献的...
- **Ext.tree.Panel**:用于展示树形结构的数据,包含配置项和方法,如节点的添加、删除和操作。 7. **数据模型(Model)** - **ExtJS Model**:数据实体模型,用于定义数据结构和关联规则,方便数据操作和绑定。...
8. **树形组件**:用于展示层级结构的数据,如文件系统或组织结构图,支持节点的展开、折叠、拖放等功能。 9. **AJAX网格**:网格组件是ExtJS的一个亮点,它允许动态加载数据,支持排序、分页和行编辑。 10. **...
8. **高级特性**:探索更复杂的功能,如拖放操作、图表绘制、树形结构等。 9. **调试与优化**:学习如何调试ExtJS应用,以及提升应用性能的技巧。 通过这个"ExtJS-4.1.1a-gpl+中午手册+入门教程",开发者可以获得...
实例部分则是理论知识与实际操作的结合,EXTJS 4.1.1提供的实例涵盖了各种常见应用场景,如表格、图表、菜单、窗体、树形结构等。这些实例通常包含了完整的HTML、CSS和JavaScript代码,开发者可以直接运行并学习。...
在EXTJS中,我们通常使用`Ext.tree.Panel`或`Ext.widget('treepanel')`来创建树形结构,并结合`Ext.form.field.ComboBox`来构建下拉效果。下面将深入探讨实现这个功能的关键步骤和相关知识点: 1. **创建树形数据...
1. `Ext.tree.TreePanel`:这是ExtJS中用于创建树形结构的主要组件。它具有丰富的配置项和事件,支持数据源绑定,能轻松实现动态加载。 2. 数据源:动态树的数据通常来自服务器,通过Ajax请求获取JSON格式的节点数据...