JavaScript的ExtJS框架中数面板TreePanel的使用实例解析


Posted in Javascript onMay 21, 2016

在ExtJS中,不管是叶子节点还是非叶子节点,都统一用TreeNode表示树的节点。在ExtJS中,有两种类型的树节点。一种节点是普通的简单树 节点,由Ext.tree.TreeNode定义,另外一种是需要异步加载子节点信息的树节点,该类由Ext.tree.AsyncTreeNode定 义。
在数据中, text 显示文字, leaf 节点 , children 子节点,expanded 展开

var store = Ext.create(‘Ext.data.TreeStore', {
root: {
expanded: true,
children: [
{ text: “留学”, leaf: true },
{ text: “功课”, expanded: true, children: [
{ text: “英语”, leaf: true },
{ text: “代数”, leaf: true}
] },
{ text: “托福”, leaf: true }
]
}
});

TreePanel从servlet中读取JSON数据
在Ext JS的Tree中的数据往往是从服务器端的动态程序中获取的。
为了获取数据,我们可以先编写一个返回JSON的Servlet共前台的树形组建访问:
服务器端servlet代码:

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

public class TreeNodeServlet extends HttpServlet {

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//这里的node是前台的AsyncTreeNode组建中设置的ID,见下面的JS程序

String treeNode = request.getParameter("node");

String json = "";

PrintWriter out = response.getWriter();

if("0".equals(treeNode)) {

json+="[{id:1,text:'0-1'},{id:2,text:'0-2'}]";

}

else if("1".equals(treeNode)) {

json+="[{id:11,text:'0-1-1',leaf:true},{id:12,text:'0-1-2',leaf:true}]";

}

else if("2".equals(treeNode)) {

json+="[{id:21,text:'0-2-1'},{id:22,text:'0-2-2',leaf:true}]";

}

else if("21".equals(treeNode)) {

json+="[{id:211,text:'0-2-1-1',leaf:true},{id:212,text:'0-2-1-2',leaf:true}]";

}

out.write(json);

}

}

现在就可以在前台的TreePanel组建的loader方法中访问上面创建的servlet了,代码如下:
客户端显示代码

Ext.onReady(function(){

var tree = new Ext.tree.TreePanel({

//这里的div-tree是在html中创建的一个对象的id值

el: 'div-tree',

//使用loader方法访问TreeNodeServlet

loader: new Ext.tree.TreeLoader({dataUrl:'../TreeNodeServlet'})

});

var root = new Ext.tree.AsyncTreeNode({id:'0',text:'0'})

tree.setRootNode(root);

tree.render();

root.expand();

});

效果图如下:

JavaScript的ExtJS框架中数面板TreePanel的使用实例解析

在树TreePanel之间拖放结点
有时候我们在程序中,需要把一棵TreePanel的元素拖放到另外一棵TreePanel中,如果是在同一棵树中拖动时设置组件的enableDD参数为true,而现在需要在不同给的书之间拖动元素,这个时候就可以设置组件的enableDrag和enableDrop参数,详细示例如下:

1.编写JS代码:
JS代码

Ext.onReady(function(){

  var tree1 = new Ext.tree.TreePanel({
    el: 'tree1',
 //这里设置enableDrag为true表示可以从这里拖动元素到别处
    enableDrag:true,
    loader: new Ext.tree.TreeLoader({dataUrl: 'treeData1.txt'})
  });
  var tree2 = new Ext.tree.TreePanel({
    el: 'tree2',
 //这里设置enableDrop为true表示可以在这棵树中放置拖动过来的元素
    enableDrop:true,
    loader: new Ext.tree.TreeLoader({dataUrl: 'treeData2.txt'})
  });
  var root1 = new Ext.tree.AsyncTreeNode({text:'跟节点'});
  var root2 = new Ext.tree.AsyncTreeNode({text:'图书'});
  tree1.setRootNode(root1);
  tree2.setRootNode(root2);
  tree1.render();
  tree2.render();

});

2.HTML代码如下:
HTML代码

<div id="tree1"></div>
<div id="tree2"></div>

3.编写两个TreeLoader需要装载的txt文件,里面的数据为JSON格式:
treeData1.txt:

[
    {text:'非叶子结点'},
    {text:'叶子结点',leaf:true}
]
treeData2.txt:

[
  {text:'计算机',children:[
    {text:'Java',children:[
      {text:'Java核心技术',leaf:true},
      {text:'Thinking in Java',leaf:true}
    ]},
    {text:'算法导论',leaf:true}
  ]},
  {text:'音乐',children:[
    {text:'乐理基础',leaf:true},
    {text:'卡尔卡西古典吉他教程',leaf:true}
    ]}
]

4.程序效果如下图所示:

JavaScript的ExtJS框架中数面板TreePanel的使用实例解析

Javascript 相关文章推荐
JS实现表格数据各种搜索功能的方法
Mar 03 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
AngularJS基础 ng-class-odd 指令示例
Aug 01 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
关于Angular2 + node接口调试的解决方案
May 28 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
js实现鼠标点击页面弹出自定义文字效果
Dec 24 Javascript
vue实现的多页面项目如何优化打包的步骤详解
Jul 19 Javascript
IScroll5 中文API参数说明和调用方法
May 21 #Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 #Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 #Javascript
jQuery插件pagination实现无刷新分页
May 21 #Javascript
JavaScript中对JSON对象的基本操作示例
May 21 #Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 #Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 #Javascript
You might like
学习使用PHP数组
2006/10/09 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
three.js实现圆柱体
2018/12/30 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
Python中用于计算对数的log()方法
2015/05/15 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
Python实现微信表情包炸群功能
2021/01/28 Python
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
初中校园广播稿
2014/02/02 职场文书
学生党员检讨书范文
2014/12/27 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
V Rising 服务器搭建图文教程
2022/06/16 Servers