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+xml技术实现分页浏览
Jul 27 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 Javascript
js实现鼠标悬浮给图片加边框的方法
Jan 30 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 Javascript
Vue实现push数组并删除的例子
Nov 01 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邮件类
2007/01/03 PHP
为你总结一些php系统类函数
2015/10/21 PHP
php表单处理操作
2017/11/16 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
python中元组的用法整理
2020/06/15 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
个人四风问题整改措施
2014/10/24 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
八一建军节慰问信
2015/02/14 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
pytorch 实现变分自动编码器的操作
2021/05/24 Python
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python