如何动态生成EasyUI的表头
需求
前几天遇到了这样一个需求,在页面上展示一组数据,但是表头不固定,需要动态加载出来。比如这次查询表头有【姓名】【年龄】,可能下次查询表头就变成了【姓名】【年龄】【性别】。
思路简介
我刚刚接手这个项目,前端技术用的是EasyUI,不大熟悉。翻看了一下前人的代码,表头都是写死的。在网上查了一下,形形色色的答案,但是思路大致是统一的,无非就是把datagrid的columns拼出来,只是在前端拼还是在后端拼的问题。
我觉得还是在前端拼比较好,看起来没有那么乱。大概就是说后端封装一个对象包含比如title、filed、width等属性,然后将这个对象的数组返回给前端。前端通过JS遍历这个数组,拼接出需要的数据结构,赋值给columns。
但是我没有用这种方式,因为我是一个后端选手,还是用后端代码写起来更得心应手些。
后端的写法最初我是定义了一个 TableHeader 对象,把前端需要的字段封装起来,然后前端,直接将接收到的数组赋值到 columns,不需要再进行其他处理。
public class TableHeader{
String title;
String filed;
int width;
}
这种写法有一个问题,就是当我需要为数据添加 formatter 函数进行数据处理的时候,我需要的是 formatter : function(value,row,index){...} 这种数据格式,但是json解析出来给我加上了双引号 “formatter”:“function(value,row,index){...}“。我不知道怎么去掉这个双引号,所以选择的另外一种简单粗暴的方式,拼接字符串。
代码展示
后端提供数据的方法:
public String getTableHeaders(Object param) {
StringBuilder sb = new StringBuilder();
sb.append("[");
List<String> columns = baseDao.getDynamicColumns(param);
if (columns.isEmpty()) {
sb.append("]");
} else {
for (String column : columns) {
String str = String.format("{field:\"%s\", title:\"%s\", width:%d, align:\"right\"},",column,column, 150);
sb.append(str);
}
sb.replace(sb.length() - 1, sb.length(), "]");
} return sb.toString();
}
如果需要添加formatter或者rowstyler函数,直接在字符串里拼就行了。不大好看,但是绝对好使。
前端调取数据的方法:
var columns = [[]];
$.ajax({
type: "post",
async: false, // 这里要注意设置为false, 表头要先于数据加载
data: param,
dataType: "json",
traditional: true, //这里设置为true
url: ctx + "/report/" + headerUri + "/tableheaders",
success: function (ret) {
columns = [eval(ret)]; // 这里要注意使用 eval() 方法解析字符串
}});
$('#list').datagrid({
url:'xxxxx',
queryParams:xxxx,
rownumbers: true,
columns: columns
})
其实只要思路搞清楚,实现起来并不复杂。
easyUI 是一个有点老但是十分简单的框架,文档也很清晰,在使用它的时候不妨多看看文档,有时候比在网上搜来搜去更有效。比如动态显隐行,一个rowStyler就能解决的问题,网上好多人搞得很复杂,甚至有说easyUI不支持的,很是误导人。
rowStyler: function (index, row) {
if (row.indicator == '1') {
return 'display:none';
}else{
return 'background-color: yellow;';
}
}
}
前人的经验,不可不信,不可尽信。
如何动态生成EasyUI的表头的更多相关文章
- .Net Mvc 返回Json,动态生成EasyUI Tree
最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...
- 从数据库读取数据并动态生成easyui tree构结
一. 数据库表结构 二.从后台读取数据库生成easyui tree结构的树 1.TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息) import java.io.Seri ...
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...
- EasyUI中动态生成标签页
这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...
- 基于DevExpress的BandedGridView动态生成多行(复合)表头
最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...
- jQuery EasyUI中DataGird动态生成列的方法
EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...
- WPF + RDLC + 动态生成列 + 表头合并
如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...
- easyui动态生成列
需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...
- easyui动态生成双列头
实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...
随机推荐
- C++中函数的形式参数引用
形式参数的传递方式 值传递 值传递是将数值传递到程序中,这种方式传递是单向传递 但是如果想要双向传递,这种视频无法满足: 引用传递 引用传递可以实现双向的传递 为了对比处两个之间的差异,这里举出两个例 ...
- GraphQL All In One
GraphQL All In One refs https://github.com/hasura/learn-graphql xgqfrms 2012-2020 www.cnblogs.com 发布 ...
- ESLint All In One
ESLint All In One ESLint $ yarn add -D eslint .eslintrc.{js,yml,json} 优先级 .eslintrc .eslintrc.js .es ...
- Scratch & Flappy Turtle & Flappy Bird & Game
Scratch & Flappy Turtle & Flappy Bird & Game Flappy Turtle Game https://scratch.mit.edu/ ...
- 新三板 & 挂牌费用
新三板 & 挂牌费用 关于拟申请公司股票在全国中小企业股份转让系统终止挂牌的提示性公告 https://pilu.tianyancha.com/announcement/ef51e981910 ...
- js online playground & web editor
js online playground & web editor -javascript playgrounds 2019 https://scotch.io/tutorials/7-jav ...
- Flutter 获取本地图片并剪切
安装依赖 dependencies: ... image_picker: image_cropper android\app\src\main\AndroidManifest.xml 将UCropAc ...
- MySQL全面瓦解22:索引的介绍和原理分析
索引的定义 MySQL官方对索引的定义为:索引(Index)是协助MySQL高效获取数据的数据结构. 本质上,索引的目的是为了提高查询效率,通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时 ...
- MarkDown编辑器基础使用教程
教程原创链接 MarkDown 段落和换行 一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行.比方说,若某一行只 ...
- display: inline、block、inline-block、flex和inline-flex
inline 共享一行 不能修改width.height属性,大小由内容撑开 padding属性 top.right.bottom.left设置都有效:margin属性只有left.right设置有效 ...