kendo UI之TreeList、DataSource常用方法总结

2023-10-10 02:30

本文主要是介绍kendo UI之TreeList、DataSource常用方法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.Kendo UI 简介

Kendo UI 是一个基于 HTML5 和 jQuery 的 UI 框架用来开发时尚Web应用。这个UI框架包括的很多 UI 控制项,数据显示组件,和自适应的手机框架,并支持数据绑定,使用模板,拖放功能。

本人主要使用的是Kendo UI Web端的jQuery的组件,因此本文所有的官网链接都指向的是Kendo UI for jQuery

Kendo UI for jQuery官网链接:https://www.telerik.com/kendo-jquery-ui
Kendo UI for jQuery在线样例:https://demos.telerik.com/kendo-ui/
Kendo UI for jQuery在线文档:https://docs.telerik.com/kendo-ui/introduction

从Kendo UI for jQuery官网链接我们可以看到一些demo样例和下载链接;
从Kendo UI for jQuery在线样例我们可以快速上手,拷贝修改Demo代码即可做出自己的web界面;
从Kendo UI for jQuery在线文档我们可以系统深入的学习Kendo UI,在线样例中的Demo仅仅是介绍了怎么使用
,更深层次的用法需要我们在在线文档中去找寻。它既是我们工作中的KendoUI工具手册。在工作中我常需要看 [API REFERENCE → JavaScript]、[WIDGETS]下的资料(如下图)

2.Kendo UI常用的功能总结

通过看demo可以很快做出很漂亮的界面,但是demo中使用到的功能还是少,并且有些显示文本或样式需要修改成自定义的,这时我们就需要从api 文档中查找相应的方法,但是api文档很庞大,找起来需要耗时间,现我将我在用TreeList时碰到的用法总结如下。
下面是一个简版的使用TreeList控件的完整的代码

<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.1.528/styles/kendo.common-bootstrap.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.1.528/styles/kendo.bootstrap.min.css">
<link href="https://codeseven.github.io/toastr/build/toastr.min.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.3.1316/js/jszip.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>
<script src="https://codeseven.github.io/toastr/build/toastr.min.js"></script>
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<style type="text/css">.btnFR{float:right};.k-icon{vertical-align:middle!important;}.k-button.k-button-icontext .k-icon, .k-button.k-button-icontext .k-image {vertical-align: middle;}.form-control {display: block;width: 90%;height: calc(1.5em + .75rem + 2px);padding: .375rem .75rem;font-size: 1rem;font-weight: 400;line-height: 1.5;color: #495057;background-color: #fff;background-clip: padding-box;border: 1px solid #ced4da;border-radius: .25rem;transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;}.k-i-none{opacity:0;}
</style>
</head>
<body>
<div class="container-fluid"><div class="group box"><div id="treeList"></div></div>
</div>
<script type="text/javascript">$(function(){$("#treeList").kendoTreeList({toolbar:["create","createchild","edit","destroy",{name:'batchDel',text:"批量删除",className:"btnFR",imageClass:"k-delete",click:function(e){e.preventDefault();var treeList = $("#treeList").data("kendoTreeList");var row = treeList.select();if(row.length==0){toastr.warning('请选择需要删除的行');}var delNames = [];var delIdList = [];for(var i=0;i<row.length;i++){var item = treeList.dataItem(row[i]);delNames.push(item.name);var delId = {id:item.id};delIdList.push(delId);}swal({title: "确定删除["+delNames.join(",")+"]么?",icon: "warning",buttons: true,dangerMode: true,}).then((willDelete) => {if (willDelete) {$.ajax({url:"/delMethod",data:delIdList,dataType:"json",type:"POST",success: function (data) {toastr.success('删除成功');},error: function (XMLHttpRequest, textStatus, errorThrown) {toast.error("删除失败");}});}});}}],resizable:true,selectable:"multiple",scrollable:true,columns:[{field:"id",title:"主键",hidden:true},{field:"name",title:"名称",expandable:true,width:"350px",template:function(item){if(item.name.length>14){return "<a title='"+item.name+"' name='nameCol' href='#'>"+item.name.substr(0,14)+"...</a>";}else{return "<a title='"+item.name+"' name='nameCol' href='#'>"+item.name+"...</a>";}}},{field:"isvisiable",title:"是否可见",template:function(item){if(item.isvisiable=1)return "是";elsereturn "否";},//点击编辑/创建子节点按钮,在行级别显示为下拉选择框editor:function(container,options){if(options.model.isNew()){//如果是新创建的节点,默认设置为1options.model.isvisiable=1;}$("<select name='isvisiable' class='form-control'><option value='1' selected>男</option><option value='0'>女</option>").apppendTo(container);}},{field:"description",title:"描述",//点击编辑/创建子节点按钮,在行级别显示为文本框editor:function(container,options){$("<textarea name='description' class='form-control' rows='5' maxlength='100'></textarea>").apppendTo(container);}},{//行级按钮command:[{name:"createchild",text:"创建子节点"},{name:"edit",text:"编辑"},{name:"del",text:"删除",imageClass:"k-icon k-delete",click:function(e){var tr = $(e.target).closest("tr");var data = this.dataItem(tr);var message = "";if(data.hasChildren==true){message = "确定要删除["+data.name+"]及其子节点么?";}else{message = "确定要删除["+data.name+"]么?";}swal({title: message,icon: "warning",buttons: true,dangerMode: true,}).then((willDelete) => {if (willDelete) {$.ajax({url:"/delMethod",data:[{id:data.id}],dataType:"json",type:"POST",success: function (data) {toastr.success('删除成功');},error: function (XMLHttpRequest, textStatus, errorThrown) {toast.error("删除失败");}});}});}}]					}],messages:{//用于修改默认按钮的显示文本(canceledit默认的显示文本是cancel,update默认的显示文本是updatecommands:{canceledit:"取消",update:"保存"}},dataBound:function(e){//数据在页面中显示后,会触发该事件//用于点击名称,展开树节点$("a[name='nameCol']").unbind("click");$("a[name='nameCol']").click(function(e){e.preventDefault();var tr = $($(this).parent().parent());if(tr.attr("aria-expanded")=="true"){$("#treeList").data("kendoTreeList").collapse(tr);}else{$("#treeList").data("kendoTreeList").expand(tr);}});},dataSource:{transport:{read:{method:"POST",url:"/readTreeNode",dataType:"json",cache:false},create:function(options){$.ajax({url:"/createTreeNode",dataType:"json",data:options.data,cache:false,success:function(res){options.success(res);toastr.success('创建成功');},error:function(res){options.error(res);toastr.error('创建失败');}});},update:function(options){$.ajax({url:"/updateTreeNode",dataType:"json",data:options.data,cache:false,success:function(res){options.success(res);toastr.success('修改成功');},error:function(res){options.error(res);toastr.error('修改失败');}});},destroy:function(options){$.ajax({url:"/delTreeNode",dataType:"json",data:options.data,cache:false,success:function(res){options.success(res);toastr.success('删除成功');},error:function(res){options.error(res);toastr.error('删除失败');}});},},schema:{model:{id:"id",parentId:"pid",fields:{id:{field:"id",type:"string",editable:false},pid:{field:"pid",nullable:true,type:"string"},name:{field:"name",type:"string",validation:{required:true,required:{message:"名称不能为空"}}},isvisiable:{field:"isvisiable",type:"number",validation:{required:true,required:{message:"名称不能为空"}}},description:{field:"description",type:"string"}}}}}});});
</script>
</body>
</html>

上面代码展示效果图如下:
在这里插入图片描述
下面将重点说明下使用TreeList常用但是在demo中没有样例,并且查询文档很费劲的地方

  1. TreeList的数据格式(下面是样例)

[
{ “id”: “0”, “name”: “Item0”, “isvisiable”:1, “description”: “Item0”, “pid”: null ,hasChildren:true},
{ “id”: “1”, “name”: “Item1”, “isvisiable”:1, “description”: “Item1”, “pid”: “0” ,hasChildren:true},
{ “id”: “2”, “name”: “Item2”, “isvisiable”:1, “description”: “Item2”, “pid”: “1” ,hasChildren:false},
{ “id”: “3”, “name”: “Item3”, “isvisiable”:1, “description”: “Item3”, “pid”: “1” ,hasChildren:false},
{ “id”: “4”, “name”: “Item4”, “isvisiable”:1, “description”: “Item4”, “pid”: null ,hasChildren:true},
{ “id”: “5”, “name”: “Item5”, “isvisiable”:1, “description”: “Item5”, “pid”: null ,hasChildren:true},
{ “id”: “6”, “name”: “Item6”, “isvisiable”:1, “description”: “Item6”, “pid”: “5” ,hasChildren:true},
{ “id”: “7”, “name”: “Item7”, “isvisiable”:1, “description”: “Item7”, “pid”: “5” ,hasChildren:true},
{ “id”: “8”, “name”: “Item8”, “isvisiable”:1, “description”: “Item8”, “pid”: “7” ,hasChildren:false},
{ “id”: “9”, “name”: “Item9”, “isvisiable”:1, “description”: “Item9”, “pid”: “7” ,hasChildren:false} ]

  1. 后台成功返回数据,数据格式也正确,但是TreeList一直显示“No records to display”
    出现这个情况,我们应注意两点
    1).根节点的 parentId是否为null,若不为null,则treeList无法加载数据
    2).parentId字段名为其他,则我们需要在schema中声明parentId指定为哪个字段,如下代码
    (schema的model属性还能设置校验)
schema:{model:{id:"id",parentId:"pid",fields:{id:{field:"id",type:"string",editable:false},pid:{field:"pidz",nullable:true,type:"string"},name:{field:"name",type:"string",validation:{required:true,required:{message:"名称不能为空"}}},isvisiable:{field:"isvisiable",type:"number",validation:{required:true,required:{message:"名称不能为空"}}},description:{field:"description",type:"string"}},expanded:false}
}
  1. treeList设置为incell(即行内编辑、新增),有些字段需要自定义样式,那么参照如下代码(在columns中,添加editor即可)
columns:[{field:"isvisiable",title:"是否可见",width:"350px",template:function(item){if(item.isvisiable=1)return "是";elsereturn "否";},//点击编辑/创建子节点按钮,在行级别显示为下拉选择框editor:function(container,options){if(options.model.isNew()){//如果是新创建的节点,默认设置一个性别options.model.isvisiable=1;}$("<select name='isvisiable' class='form-control'><option value='1' selected>男</option><option value='0'>女</option>").appendTo(container);}}
]
  1. toolbar默认的name属性有哪些
    toolbar默认的属性有create、createchild、edit、destroy,这些属性直接toolbar[‘create’,‘createchild’,‘edit’,‘destroy’]即可在页面生成对于的button并且有默认的click事件

  2. toolbar想自定义按钮如何实现
    参照如下代码

toolbar:[{name:'batchDel',text:"批量删除",className:"btnFR",imageClass:"k-delete",click:function(e){e.preventDefault();var treeList = $("#treeList").data("kendoTreeList");var row = treeList.select();if(row.length==0){toastr.warning('请选择需要删除的行');}var delNames = [];var delIdList = [];for(var i=0;i<row.length;i++){var item = treeList.dataItem(row[i]);delNames.push(item.name);var delId = {id:item.id};delIdList.push(delId);}swal({title: "确定删除["+delNames.join(",")+"]么?",icon: "warning",buttons: true,dangerMode: true,}).then((willDelete) => {if (willDelete) {$.ajax({url:"/delMethod",data:delIdList,dataType:"json",type:"POST",success: function (data) {toastr.success('删除成功');},error: function (XMLHttpRequest, textStatus, errorThrown) {toast.error("删除失败");}});}});}}
]

这篇关于kendo UI之TreeList、DataSource常用方法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/177308

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的