博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KendoUi中KendoDropDownList控件的使用——三级级联模块的实现
阅读量:6835 次
发布时间:2019-06-26

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

1. 应用需求   

在权限系统开发中除了以上数据表关系的设计之外。比較麻烦的地方是级联模块在页面的展示,因为设计中最多是控制到三级,因此三级级联模块的展示、编辑等页面操作是须要解决的问题,这里採用KendoUi中的KendoDropDownList来实现,它能够轻松的实现我们想要实现的效果。基本效果图例如以下:

如上图的关系为:通用支撑子系统(一级)包括:系统管理、用户管理、日志管理(二级)子系统;系统管理子系统中又包括管理模块(三级模块)。

每一级别的变动,其下属级别模块均会对应变化。

2. 代码演示样例   

以下就通过一些代码解说一下我们前面实现的效果,这里的数据也是模拟我们上面的数据。

页面的基本效果例如以下:

首先,使用KendoUi须要将对应的js文件引入,这里引入:jquery.min.js以及kendo.all.min.js就可以。

HTML部分:

全部控件的dataSource均来自同一个数组,通过过滤器进行条件过滤
父元素:
子元素:
子元素详情:

        非常easy,就是定义一级模块、二级模块的select标签以及三级模块的展示标签div。并给予id属性。

注意:三级模块的展示。这里使用的是KendoUi中的KendoGrid,能够定义我们自己的展示表格,这里暂不介绍KendoGrid的使用,尽管两者之间有非常多共同的地方。

JS部分:

这里须要注意下面几点:

1. 控件的数据来源

因为一级模块、二级模块以及三级模块事实上都是属于模块一类的数据,因此这三类中的数据能够採用一套,然后再通过filter控制显示不同模块的数据,如上JS代码中红色标注的dataSource部分。即採用一份数据:globalData(当然这里的数据能够是来自于PHP中获得的数据,假设是採用PHP中的数据的话,则代码为:data:<?php echo $globalData;?>)。

对于dataSourcedata的数据格式必须是JSON的形式。因此不管数据来源是JS或者是PHP其构造成的数据必须是JSON格式。

2. 控件的展示模板

   定义控件的展示模板。是为了让我们更好的控制控件显示。为控件加入filter,如上JS中的蓝色标注部分即为模板的定义以及使用,比如:<option id="#:id#" pid="#:pid#" bz_id="#:bz_id#" sub_id="#:sub_id#" value="#:value#">#:value# </option>,这样我们就能够在filter中利用我们定义的空间属性比如:idpidbz_id等对控件相互之间的关系进行控制。

3. 控件的数据过滤filter

   filter,即为过滤,它是对控件的dataSource中的data集进行过滤。然后再显示在控件中。

以下以样例中的效果为例来解说一下filter的使用。

首先。当初始化时我希望,一级模块控件中显示第一个一级模块。二级模块中显示与以及模块相应的一级模块包括的二级模块。而在三级模块中则显示与此相应的三级模块。

初始化时:firstDropDownList.dataSource.filter({ field: "bz_id", operator: "eq", value: -1 });控制一级模块显示,这里定义的规则为一级模块的bz_id == -1二级模块则依据一级模块的值来显示:

var sed_filter={logic:"and", filters:[]};var one_filter={field:"bz_id", operator:"eq", value: parseInt(firstDropDownList.dataItem().id)};var two_filter={field:"sub_id", operator:"eq", value: -1};sed_filter.filters.push(one_filter);sed_filter.filters.push(two_filter);secondDropDownList.dataSource.filter(sed_filter);
这里定义的二级模块的显示规则为二级模块的
bz_id = 
一级模块的值 
&& sub_id == -1

三级模块则依据一级与二级模块的值显示:

var filter={logic:"and", filters:[]};var bz_filter = {field:"bz_id", operator:"eq", value: parseInt(firstDropDownList.dataItem().id)};var sub_filter = {field:"sub_id", operator:"eq", value: parseInt(secondDropDownList.dataItem().id)};filter.filters.push(bz_filter);filter.filters.push(sub_filter);grid.dataSource.filter(filter);

4. 控件的点击事件

当一级模块值改变时。二级模块与三级模块的值均发生改变;当二级模块的值改变时三级模块的值会发生改变。这是通过在KendoDropDownList中的change事件来改变的,至于规则,则非常上面的一样。以一级模块改变为例:

change:function(){        //改动值后更新下拉列表2和表格数据        var sed_filter={logic:"and", filters:[]};	var one_filter={field:"bz_id", operator:"eq", value: parseInt(this.dataItem().id)};	var two_filter={field:"sub_id", operator:"eq", value: -1};	sed_filter.filters.push(one_filter);	sed_filter.filters.push(two_filter);        secondDropDownList.dataSource.filter(sed_filter);					var filter={logic:"and", filters:[]};	var bz_filter = {field:"bz_id", operator:"eq", value: parseInt(this.dataItem().id)};	var sub_filter = {field:"sub_id", operator:"eq", value: parseInt(secondDropDownList.dataItem().id)};	filter.filters.push(bz_filter);	filter.filters.push(sub_filter);				        grid.dataSource.filter(filter); }
另外,假设想採用secondDropDownList.dataItem().id来取得模板中的其他属性值。比如bz_id,sub_id等,则在定义
secondDropDownList的时候必须加上:

var secondDropDownList = $("#xxx").kendoDropDownList({...}).data("kendoDropDownList");的.data部分,否则会报错。

转载于:https://www.cnblogs.com/gavanwanggw/p/7029317.html

你可能感兴趣的文章
折腾大半年,西部数据终于收购了东芝半导体业务
查看>>
http长连接和短连接
查看>>
送上最新鲜的互联网行业新闻-【2015-05-12】
查看>>
印花税下调,今天股市上涨概率很大
查看>>
如何描述一张数据表的基本信息?
查看>>
Linux系统下UDP发送和接收广播消息小例子
查看>>
Asp.net跨站脚本攻击XSS实例分享
查看>>
Linux系统下的单调时间函数
查看>>
美国人开发了一个有趣的网站,可以算出你被机器人抢饭碗的概率
查看>>
H.264中NAL、Slice与frame意思及相互关系
查看>>
《Linux From Scratch》第二部分:准备构建 第五章:构建临时文件系统- 5.25. Gzip-1.6...
查看>>
Spark-SparkSQL深入学习系列六(转自OopsOutOfMemory)
查看>>
在HTML下,如何为多个选择框提取数据并序列化
查看>>
还以为敏捷开发是个概念?有人已经将它变为现实了!
查看>>
无服务计算是未来
查看>>
热点推荐:Java类加载器深入理解
查看>>
如何实现一个稍微复杂的simplelist
查看>>
安全课堂:云安全七项最佳实践
查看>>
数据分析,或许不是为了分析,而是为了规范
查看>>
苹果陷恐怖分子数据加密风波 WhatsApp声援
查看>>