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弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 Javascript
微信小程序页面缩放式侧滑效果的实现代码
Nov 15 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
Vue插件之滑动验证码
Sep 21 Javascript
java和js实现的洗牌小程序
Sep 30 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笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
让您的菜单不离网站
2006/10/03 Javascript
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
Redux实现组合计数器的示例代码
2018/07/04 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
酒店应聘自荐信
2013/11/09 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
关于母亲节的感言
2014/02/04 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
读后感作文评语
2014/12/25 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python