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中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
Three.js源码阅读笔记(光照部分)
Dec 27 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
video.js使用改变ui过程
Mar 05 Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 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
中国第一家无线电行
2021/03/01 无线电
php生成缩略图的类代码
2008/10/02 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
Python运算符重载详解及实例代码
2017/03/07 Python
python实现字符串和字典的转换
2018/09/29 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
python中turtle库的简单使用教程
2020/11/11 Python
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
文员岗位职责
2013/11/09 职场文书
教育科研先进个人材料
2014/01/26 职场文书
自主招生自荐信指南
2014/02/04 职场文书
五一活动标语
2014/06/30 职场文书
助学贷款贫困证明
2014/09/23 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
销售人才自我评价范文
2014/09/27 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
应急管理工作总结2015
2015/05/04 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL