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 相关文章推荐
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
jquery 按钮状态效果 正常、移上、按下
Aug 12 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
JS实现文字掉落效果的方法
May 06 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
jquery之别踩白块游戏的简单实现
Jul 25 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
JavaScript中的this妙用实例分析
May 09 Javascript
vue3语法糖内的defineProps及defineEmits
Apr 14 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入门的学习方法
2007/01/02 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
PHP中串行化用法示例
2016/11/16 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python 文件操作的详解及实例
2017/09/18 Python
python3处理含有中文的url方法
2018/05/10 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
python类的实例化问题解决
2019/08/31 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
一份婚庆公司创业计划书
2014/01/11 职场文书
旅游个人求职信范文
2014/01/30 职场文书
授权委托书怎么写
2014/04/03 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
员工升职自我评价
2019/03/26 职场文书
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫