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 相关文章推荐
JAVASCRIPT  THIS详解 面向对象
Mar 25 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
Nov 28 Javascript
JS字符串函数扩展代码
Sep 13 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
利用Vue.js实现checkbox的全选反选效果
Jan 18 Javascript
微信小程序实战之自定义模态弹窗(8)
Apr 18 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 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
Drupal简体中文语言包安装教程
2014/09/27 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
js仿淘宝放大镜效果
2020/12/28 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python异常学习笔记
2015/02/03 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python中文字符串截取问题
2015/06/15 Python
Python语法快速入门指南
2015/10/12 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
PyTorch基本数据类型(一)
2019/05/22 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
《曹刿论战》教学反思
2014/03/02 职场文书
护理见习报告范文
2014/11/03 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python