这是用过的"最差"树形插件 !!!

或许大家听过一个bootstrap UI框架---ace皮肤。有兴趣的童鞋可以在线查看:https://www.iteblog.com/ace/index.html

相较于此前使用的ExtJs 3.x或者传统的jquery easy ui框架,bootstrap风格的确让人眼前一亮。

但是说到它集成的属性插件,或许就没有那么让人愉快了。

下载官方Demo,找到位于如下位置:

与多数属性控件不同,fuelux.tree 的data格式不是很标准。

格式如下:

是的就是这么任性。

看起来就是反人类的一种格式,开发人员不得不从正常的属性结构做一次转换。

但是当你看了这个效果之后,你也许会和我一样,坚持尝试.是滴,水瓶就是那么坚持!

为了保持项目整体风格的一致性,笔者也只好尝试该控件。

花了大半天时间总算有点眉目,对于其中的艰辛不希望后来者走同样的弯路。方便别人也是帮助自己嘛。哈哈

笔者这里使用的是C#进行动态绑定,故按照结构是如下类,

public class FueluxTree{public Dictionary<string, FueluxTreeNode> data { get; set; }public string status { get; set; }}/// <summary>/// 绑定FueluxTreeNode/// </summary>public class FueluxTreeNode{public string type { get; set; }public string name { get; set; }public additionalParameters additionalParameters { get; set; }}public class additionalParameters{public int id { get; set; }public bool itemSelected { get; set; }public Dictionary<string, FueluxTreeNode> children { get; set; }}
这样基本的json格式就满足了。接下来需要模拟一些后台数据,按关系型数据库存储格式准备一些数据。设计类型如下:public class Student{public int Id { get; set; }public int ParentId { get; set; }public string Name { get; set; }public int level { get; set; }}

View Code

服务数据:

public class TestService{private static TestService _Instance = null;public static TestService Instance{get{if (_Instance == null)_Instance = new TestService();return _Instance;}}private TestService(){}public FueluxTree GetTree(){FueluxTree _Tree = new FueluxTree();List<Student> students = GetSutdents();FueluxTreeNode node = new FueluxTreeNode{name = "root",type = "folder",additionalParameters = new additionalParameters{id = 0,//children=new List<FueluxTreeNode>(),children = new Dictionary<string, FueluxTreeNode>(),itemSelected = false,}};_LoopToAppendChildren(students, node);_Tree.data = node.additionalParameters.children;_Tree.status = "OK";return _Tree;}private void _LoopToAppendChildren(List<Student> students, FueluxTreeNode node){//[{status: "OK", data: [{"name":"South Africa","type":"folder","additionalParameters":{"id":"1"}}] }]var substudents = students.Where(c => c.ParentId == node.additionalParameters.id).ToList();foreach (Student student in substudents){string type = string.Empty;if (student.level == 3)type = "item";elsetype = "folder";FueluxTreeNode subnode = new FueluxTreeNode{name = student.Name,type = type,additionalParameters = new additionalParameters{id = student.Id,//children = new List<FueluxTreeNode>()children = new Dictionary<string, FueluxTreeNode>()}};//node.additionalParameters.children.Add(subnode);
                node.additionalParameters.children.Add(student.Name, subnode);_LoopToAppendChildren(students, subnode);}}public List<Student> GetSutdents(){List<Student> _Students = new List<Student>();_Students.Add(new Student{Id = 1,ParentId = 0,Name = "四川",level=1});_Students.Add(new Student{Id = 2,ParentId = 0,Name = "重庆",level=1});_Students.Add(new Student{Id = 3,ParentId = 1,Name = "成都",level=2});_Students.Add(new Student{Id = 4,ParentId = 3,Name = "大邑",level=3});_Students.Add(new Student{Id = 5,ParentId = 2,Name = "涪陵",level = 2});return _Students;}}

View Code

注意:这里 只是Demo,类型为Student,严格讲,应该是Area更为确切.

.net mvc 控制其中返回

[HttpPost]public JsonResult GetTreeData(){var tree= TestService.Instance.GetTree();return Json(tree,JsonRequestBehavior.AllowGet);}

View Code

后台部分已经完成,相对来说,还是比较精简了.

接下来前台页面如何绑定呢??

@{ViewBag.Title = "Index";//Layout = "~/Areas/Admins/Views/Shared/_Layout.cshtml";Layout = null;
}<h2>Index</h2>
<link href="~/Assets/Ace1.3/css/bootstrap.min.css" rel="stylesheet" />
<link href="~/Assets/Ace1.3/css/font-awesome.min.css" rel="stylesheet" /><!-- fonts -->
<link href="~/Assets/Ace1.3/css/ace-fonts.css" rel="stylesheet" /><link href="~/Assets/Ace1.3/css/ace.min.css" rel="stylesheet" />
<!--[if lte IE 9]><link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<![endif]--><div class="row"><div class="center" style="width:400px; margin:12px;"><div class="widget-box align-left transparent"><div class="widget-header"><h4 class="lighter smaller">Tree element loading data from server <br /> pre-selecting some items randomly</h4></div><div class="widget-body"><div class="widget-main padding-8"><div id="treeview" class="tree"></div><div class="hr"></div><button id="submit-button" type="button" class="btn btn-sm btn-primary pull-right"><i class="ace-icon fa fa-check"></i>Submit</button></div></div></div></div></div><div id="modal-tree-items" class="modal" tabindex="-1"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal">&times;</button><h4 class="blue bigger">Treeview selection</h4></div><div class="modal-body"><div class="row-fluid">Content can be put inside a hidden input and sent to server</div><div class="space-6"></div><div class="row-fluid"><textarea spellcheck="false" id="tree-value"></textarea></div></div><div class="modal-footer"><button class="btn btn-sm" data-dismiss="modal"><i class="ace-icon fa fa-times"></i> Cancel</button><button class="btn btn-sm btn-primary"><i class="ace-icon fa fa-check"></i> OK</button></div></div></div>
</div><!-- basic scripts -->
<!--[if !IE]> -->
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<!-- <![endif]-->
<!--[if IE]>
<script type="text/javascript">window.jQuery || document.write("<script src='../assets/js/jquery-1.10.2.min.js'>"+"<"+"/script>");
</script>
<![endif]-->
<script src="~/Assets/Ace1.3/js/fuelux/data/fuelux.tree-sample-demo-data.js"></script>
<script src="~/Assets/Ace1.3/js/bootstrap.min.js"></script>
<script src="~/Assets/Ace1.3/js/fuelux/fuelux.tree.min.js"></script><!-- ace scripts -->
<script src="~/Assets/Ace1.3/js/ace.min.js"></script>
<script src="~/Assets/Ace1.3/js/ace-elements.min.js"></script><script type="text/javascript">$(function () {var tree_data1 = getTreeData();console.log(tree_data1);var treeDataSource = new DataSourceTree({ data: tree_data1 });$('#treeview').ace_tree({dataSource: treeDataSource,loadingHTML: '<div class="tree-loading"><i class="ace-icon fa fa-refresh fa-spin blue"></i></div>','open-icon': 'tree-minus','close-icon': 'tree-plus','selectable': true,'selected-icon': 'ace-icon fa fa-check','unselected-icon': 'ace-icon fa fa-times'});$('#tree-selected-items').on('click', function () {console.log("selected items: ", $('#treeview').tree('selectedItems'));});$('#treeview').on('selected', function (evt, data) {console.log('item selected: ', data);});//show selected items inside a modal
        $('#submit-button').on('click', function () {var tree = $('#treeview').data('tree');var output = '';var items = tree.selectedItems();for (var i in items) if (items.hasOwnProperty(i)) {var item = items[i];//output += item.additionalParameters['id'] + ":"+ item.name+"\n";
                output += item.name + "\n";}$('#modal-tree-items').modal('show');$('#tree-value').css({ 'width': '98%', 'height': '200px' }).val(output);});if (location.protocol == 'file:') alert("For retrieving data from server, you should access this page using a webserver.");});function getTreeData() {var returnvalue;$.ajax({type: 'POST',url: "/Admins/AceTree/GetTreeData",async: false,dataType: "json",success: function (result) {if (result.status == "OK") {returnvalue = result.data;}}});return returnvalue;}
</script>

View Code

值得提醒的是,DataSourceTree的定义,来源于example包中,

好了,最终动态绑定已经实现,界面如下

当然,这里主要是将实现功能,美化需要进一步完善。

吐槽:

实际上树形功能和别的插件差不多,只是格式有点奇怪,所以这个也算是使用过的"最差"的一个树形插件,

不过还是因为其友好的UI,选择了坚持使用。

今年的七夕情人节已经来临,在此祝天下有情人终成眷属!

参考资料:

https://www.iteblog.com/ace/treeview.html

http://www.cnblogs.com/zgz21/p/5166871.html

转载于:https://www.cnblogs.com/lucky_hu/p/5751546.html

这是用过的最差树形插件相关推荐

  1. 关于树形插件展示中数据结构转换的算法

    问题背景 在一些目录结构.机构层级等展示的场景中,我们经常会用到一些成熟的树形插件来进行轻松展示,比如ztree等.大多数插件会支持对两种数据源格式的解析,一种是通用的二维数据结构,一种是树状数据结构 ...

  2. html缩放惯性,js带滚动惯性的视觉差特效插件

    luxy.js一款js带滚动惯性的视觉差特效插件.该插件可以在页面中制作图片HTML内容滚动视觉差特效,并且在页面滚动时,带有惯性效果,非常炫酷. 安装 可以通过npm来安装luxy.js插件. np ...

  3. 6月项目总结--浅尝jsp(官网优化),移动端Echarts,mescroll试水,树形插件bootstrap-treeview

    在此立一个flag,每月15日之前发布上一个月的项目总结,以此督促自己坚持 项目1,官网优化之JSP页面 1,先说说我自己对jsp页面的理解: jsp:java sever page 也就是java服 ...

  4. jQuery-------zTree树形插件-jQuery插件

    解压zTree_v3-master,查看demo 使用浏览器访问\zTree_v3-master\demo\cn的index.html页面 案例:最简单的树-标准json数据 步骤 1. 查看/dem ...

  5. html5 jstree树形菜单,树形插件jsTree

    jsTree是一款基于jQuery的树形控件,具有扩展性强,可编辑和可配置的特性,支持HTML,JSON和Ajax数据加载.jsTree官网地址:https://www.jstree.com/.这里主 ...

  6. jquery treeview 树形插件

    jquery treeview 插件参数说明 treeview开源地址:https://github.com/jzaefferer/jquery-treeview 1.animated:String ...

  7. Js树形插件ztree

    这几天做权限管理的时候 权限列表的展示 用到了这个插件   也是好一番研究之后才会用   现在想想其实挺简单的 主要就是js的配置 <!DOCTYPE html> <HTML> ...

  8. eleTree树形插件引入

    先放一个效果 @eleTree插件官网 刚开始用的xtree,不知为何总是达不到效果,不得已从layui官网插件中寻得这个eleTree插件,看着还不错,用法也简单.不过还是有点坑需要大家注意 开始使 ...

  9. bootstrap风格的树形插件bootstrap treeview的使用记录

    var options = {data: data, //data属性是必须的,是一个对象数组 Array of Objects.color: "", //所有节点使用的默认前景色 ...

  10. java ztree 异步加载_插件使用一树形插件---zTree一zTree异步加载

    zTree 可以实现异步加载.异步加载可以让初次加载速度快,带来好的用户体验. 异步加载 官方源码中的demo提示了例子.例子是采用php语言. 在java语言中,zTree如何与Servlet结合呢 ...

最新文章

  1. BFS:图的最短路径  Aizu - 0558 ​​​​​​​Cheese
  2. 未来区块链技术将赋能多个领域促进全球经济发展
  3. js高级---js运行原理
  4. UA PHYS515A 电磁理论V 电磁波与辐射5 电磁波在介质中的传播
  5. java web项目中连接mysql数据库,javaweb之eclipse工程连接mysql数据库
  6. docker教程_7 Docker-Compose
  7. Intellij Idea 创建maven WebAPP项目
  8. Flink 1.11 Unaligned Checkpoint 解析
  9. 遥感影像转换成MapGIS识别的msi格式
  10. IDEA中Maven项目中报错:10 unmapped Spring configuration files
  11. 八月十一上午笔记钊哥第一节课
  12. Mac OS下安装Photoshop CC 2017破解版
  13. 个人如何搭建博客网站
  14. iOS 手机照片上传服务器方向不对的原因以及解决方法
  15. 伪造邮件***,看我如何给网易邮箱APP发送垃圾邮件【二】
  16. 区块链市场——专为用户打造的一站式应用下载平台
  17. 写《2020年11月线上自行车业务分析报告》
  18. 显示计算机名在桌面壁纸,Windows桌面壁纸自动显示计算机详细信息小工具–BgInfo...
  19. 微信公众号自定义分享注意事项
  20. Linux查看tomcat是否启动,查看tomcat监听端口

热门文章

  1. spring5.0学习笔记10
  2. git clone拉取指定分支
  3. (最新)面向科研人员的免费遥感数据集
  4. CNN数值初始化——xavier
  5. python和Java实现斐波那契Fibonacci数列
  6. php时间测试,PHP 测试程序运行时间
  7. 仿某某网站模板thinkphp_7个免费PPT模板网站,远离撞P的尴尬
  8. java abs是什么意思_java math.abs
  9. two phase commit protocol(2PC)两个阶段提交是什么
  10. Ubuntu16.04 安装Apache2和php后,无法访问phpinfo.php