电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

多叉树结合JavaScript树形组件实现无限级树形视图(一种构建多级有序树形结构JSON(或XML)数据源的方法)

  • 资源ID:273089316       资源大小:588KB        全文页数:14页
  • 资源格式: DOC        下载积分:1金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要1金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

多叉树结合JavaScript树形组件实现无限级树形视图(一种构建多级有序树形结构JSON(或XML)数据源的方法)

多叉树结合JavaScript树形组件实现无限级树形视图(一种构建多级有序树形结构JSON(或XML)数据源的方法)一、问题研究的背景和意义在Web应用程序开发领域,基于Ajax技术的JavaScript树形组件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项。目前市场上常见的JavaScript框架及组件库中均包含自己的树形组件,例如jQuery、Ext JS等,还有一些独立的树形组件,例如dhtmlxTree等,这些树形组件完美的解决了层次数据的展示问题。展示离不开数据,树形组件主要利用Ajax技术从服务器端获取数据源,数据源的格式主要包括JSON、XML等,而这些层次数据一般都存储在数据库中。“无限级树形视图”,顾名思义,没有级别的限制,它的数据通常来自数据库中的无限级层次数据,这种数据的存储表通常包括id和parentId这两个字段,以此来表示数据之间的层次关系。现在问题来了,既然树形组件的数据源采用JSON或XML等格式的字符串来组织层次数据,而层次数据又存储在数据库的表中,那么如何建立起树形组件与层次数据之间的关系,换句话说,如何将数据库中的层次数据转换成对应的层次结构的JSON或XML格式的字符串,返回给客户端的JavaScript树形组件?这就是我们要解决的关键技术问题。本文将以目前市场上比较知名的Ext JS框架为例,讲述实现无限级树形视图的方法,该方法同样适用于其它类似的JavaScript树形组件。Ext JS框架是富客户端开发中出类拔萃的框架之一。在Ext的UI组件中,树形组件无疑是最为常用的组件之一,它用来实现树形结构的视图。TreeNode用来实现静态的树形视图,AsyncTreeNode用来实现动态的异步加载树形视图,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形视图节点。动态生成树有两种思路:一种是一次性生成全部树节点,另一种是逐级加载树节点(利用Ajax,每次点击节点时查询下一级节点)。对于大数据量的树节点来说,逐级加载是比较合适的选择,但是对于小数据量的树节点来说,一次性生成全部节点应该是最为合理的方案。在实际应用开发中,一般不会遇到特别大数据量的场景,所以一次性生成全部树节点是我们重点研究的技术点,也就是本文要解决的关键技术问题。本文以基于Ext JS的应用系统为例,讲述如何将数据库中的无限级层次数据一次性在界面中生成全部树节点(例如在界面中以树形方式一次性展示出银行所有分支机构的信息),同时对每一个层次的节点按照某一属性和规则排序,展示出有序的树形结构。解决一次性构造无限级树形视图的问题,可以拓展出更多的应用场景,例如树形结构表格TreeGrid,一次性生成树形表格,对树形表格进行完整分页,对表格列进行全排序;或者可以利用本文的思路扩展出其他的更复杂的应用场景。先看两个图例,有个直观上的认识:图一,银行分支机构树形视图图二,树形结构表格二、详细设计方案让我们先看两段代码片段:文件一,branchTree.html (Ext树形组件页面)Ext.onReady(function() var tree = new Ext.tree.TreePanel( height: 300, width: 400, animate:true, enableDD:true, containerScroll: true, rootVisible: false, frame: true,/ getBranch.do请求服务器返回多级树形结构的JSON字符串 loader: new Ext.tree.TreeLoader(dataUrl:'getBranch.do'), root : new Ext.tree.AsyncTreeNode(id:'0',text:'根结点') ); tree.expandAll(); );文件二,branchTreeJSON.jsp (接收getBranch.do请求,返回多级树形结构的JSON字符串)<%/ 读取银行分支机构的层次数据List result = DataAccess.getBankInfoList();/ 将层次数据转换为多叉树对象(本文下面会详细介绍该数据结构的实现方法)Node root = ExtTreeHelper.createExtTree(result); %> <%=root.toString()%> <!- 以JSON的形式返回响应数据,Ext.tree.TreeLoader会根据此数据生成树形结构 ->以上两个程序文件是一次性生成无限级树形视图所必须的,其中最为关键的部分就是如何生成一个无限级的树形结构JSON字符串,返回给客户端的Ext树形组件。对于银行分支机构来说,需要返回类似如下的JSON串: id: '100000', text: '廊坊银行总行', children: id: '110000', text: '廊坊分行', children: id: '113000', text: '廊坊银行开发区支行', leaf: true , id: '112000', text: '廊坊银行解放道支行', children: id: '112200', text: '廊坊银行三大街支行', leaf: true , id: '112100', text: '廊坊银行广阳道支行', leaf: true , id: '111000', text: '廊坊银行金光道支行', leaf: true 同时还需要对树中每一个层次的节点按照某一属性(比如分支机构编号)进行排序,以展示出有序的树形结构。现在可以把问题概括为:1、 把数据库中的层次数据转换成多级树形结构的JSON格式的字符串2、 对树中每一个层次的节点按照某一属性(比如分支机构编号)进行排序下面介绍解决问题的思路:在数据结构这门课中,我们都学过树,无限级树形结构就可以抽象成一种多叉树结构,即每个节点下包含多个子节点的树形结构,首先就需要把数据库中的层次数据转换成多叉树结构的对象树,也就是构造出一棵多叉树。有了数据结构,还要实现相应的算法,我们需要实现两种算法:1、兄弟节点横向排序算法,对隶属于同一个父节点下面的所有直接子节点按照某一节点属性和规则进行排序,保持兄弟节点横向有序;2、先序遍历算法,递归打印出无限级JSON字符串。概括起来分为三步:1、 构造无序的多叉树结构2、 实现兄弟节点横向排序方法3、 实现先序遍历方法,打印出JSON字符串如图所示:三、源代码实现(Java版)实现这样一颗树,需要设计两个类:树类(MultiwayTree)、节点类(Node);排序时还需要一个比较器类(NodeIDComparator);为了方便演示,还需要构造一些假的层次数据,因此还需要建一个构造假数据的类(VirtualDataGenerator),以下代码拷贝出来之后可直接运行测试:package test;import java.util.ArrayList;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.Collections;/* * 多叉树类 */public class MultiwayTree public static void main(String args) / 读取层次数据结果集列表 List dataList = VirtualDataGenerator.getVirtualResult();/ 节点映射表,用于临时存储节点对象HashMap nodeMap = new HashMap();/ 根节点Node root = null;/ 将结果集存入映射表(后面将借助映射表构造多叉树)for (Iterator it = dataList.iterator(); it.hasNext();) Map dataRecord = (Map) it.next();Node node = new Node();node.id = (String) dataRecord.get("id");node.text = (String) dataRecord.get("text");node.parentId = (String) dataRecord.get("parentId");nodeMap.put(node.id, node);/ 构造无序的多叉树Set entrySet = nodeMap.entrySet();for (Iterator it = entrySet.iterator(); it.hasNext();) Node node = (Node) (Map.Entry) it.next().getValue();if (node.parentId = null | node.parentId.equals("") root = node; else (Node) nodeMap.get(node.parentId).addChild(node);/ 输出无序的树形结构的JSON字符串System.out.println(root);/ 对多叉树进行横向排序root.sortChildren();/ 输出有序的树形结构的JSON字符串System.out.println(root);/ 程序输出结果如下:/ 无序的树形结构(格式化后的结果,可使用JSON格式化工具查看,例如 http:/jsonviewer.stack.hu/ 在线查看器):

注意事项

本文(多叉树结合JavaScript树形组件实现无限级树形视图(一种构建多级有序树形结构JSON(或XML)数据源的方法))为本站会员(人**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.