博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
这是用过的"最差"树形插件
阅读量:4326 次
发布时间:2019-06-06

本文共 5800 字,大约阅读时间需要 19 分钟。

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

    

     或许大家听过一个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
data { get; set; } public string status { get; set; } } ///
/// 绑定FueluxTreeNode /// 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
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
students = GetSutdents(); FueluxTreeNode node = new FueluxTreeNode { name = "root", type = "folder", additionalParameters = new additionalParameters { id = 0, //children=new List
(), children = new Dictionary
(), itemSelected = false, } }; _LoopToAppendChildren(students, node); _Tree.data = node.additionalParameters.children; _Tree.status = "OK"; return _Tree; } private void _LoopToAppendChildren(List
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"; else type = "folder"; FueluxTreeNode subnode = new FueluxTreeNode { name = student.Name, type = type, additionalParameters = new additionalParameters { id = student.Id, //children = new List
() children = new Dictionary
() } }; //node.additionalParameters.children.Add(subnode); node.additionalParameters.children.Add(student.Name, subnode); _LoopToAppendChildren(students, subnode); } } public List
GetSutdents() { List
_Students = new List
(); _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;}

Index

Tree element loading data from server
pre-selecting some items randomly

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

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>