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 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
Jan 04 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
Vue之Watcher源码解析(2)
Jul 19 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
vue ssr+koa2构建服务端渲染的示例代码
Mar 23 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 Javascript
Vue组件简易模拟实现购物车
Dec 21 Vue.js
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的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php读取本地json文件的实例
2018/03/07 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
jquery操作select大全
2014/04/25 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
小程序自定义日历效果
2018/12/29 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
HTML5通用接口详解
2016/06/12 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
党员查摆四风问题思想汇报
2014/10/25 职场文书
军训决心书范文
2015/09/22 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang