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 幻灯插件和教程
Mar 27 Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 Javascript
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
20个实用的JavaScript技巧分享
Nov 28 Javascript
vue拦截器Vue.http.interceptors.push使用详解
Apr 22 Javascript
Vue实现购物车功能
Apr 27 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
vue中如何使用ztree
Feb 06 Javascript
学习node.js 断言的使用详解
Mar 18 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 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
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
jquery操作select大全
2014/04/25 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
Python lambda和Python def区别分析
2014/11/30 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
python os模块简单应用示例
2019/05/23 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
实习护理工作自我评价
2013/09/25 职场文书
在职研究生自我鉴定
2013/10/16 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
安全检查验收制度
2014/01/12 职场文书
加工操作管理制度
2014/01/19 职场文书
工作目标责任书
2014/07/23 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
个人年底工作总结
2015/03/10 职场文书
机关保密工作承诺书
2015/05/04 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python