在将公司项目前端的框架迁移到Layui上,最近碰到了在table中需要根据行的某几个字段以及登录账号角色显示不同的按钮,达到权限控制。翻阅了官方文档和部分博客主的博文后,终于找到实现需求的方式了,特在此记录,方便后期再次遇到好查阅。
在官方文档中,提供了templet 自定义列模板来完成对某列的单元格添加链接等其它元素。实现操作列显示不同按钮也需要通过这个模板来做。
templet 提供了三种使用方式,请结合实际场景选择最合适的一种:如果自定义模版的字符量太大,我们推荐你采用【方式一】;如果自定义模板的字符量适中,或者想更方便地调用外部方法,我们推荐你采用【方式二】;如果自定义模板的字符量很小,我们推荐你采用【方式三】
方式一:绑定模版选择器
注意:上述的 {{d.id}}、{{d.title}} 是动态内容,它对应数据接口返回的字段名。除此之外,你还可以读取到以下额外字段: 序号:{{ d.LAY_INDEX }} (该额外字段为 layui 2.2.0 新增)
如果要实现动态根据列的值显示按钮,方法一可以用以下方式实现:
框内的‘{{’、‘}}’需要注意
由于模板遵循 laytpl 语法(建议细读 laytpl文档),因此在模板中你可以写任意脚本语句(如 if else/for等)
这种方式在只需要实现根据某列值显示按钮时,推荐用这种方式更加方便。
方式二:函数转义
自 layui 2.2.5 开始,templet 开始支持函数形式,函数返回一个参数 d,包含接口返回的所有字段和数据。如下所示:
方法三:直接赋值模版字符
事实上,templet 也可以直接是一段 html 内容,如:
注意:这里一定要被一层 <div></div>包裹,否则无法读取到模板
我的需求实现方式
以上是官方文档提供的三个方法。由于我的需求的需要根据不同列和登录账号的角色来显示按钮,方法一能够满足我的前一个需求,但是无法同时满足两个需求。在翻阅了部分博客文章后,在博主好巧的文章《layui admin table表格中根据后台数据动态渲染switch开关》中看到了解决方案。以下是我写的示例:
需要注意的是:一定要被一层 <div></div>包裹,否则无法读取到模板,不显示按钮。
好巧的文章中,用的是:templet: temp,这时候要注意 var temp需要放到table.render()前面,否则也会造成不报错,但不显示按钮情况。
好巧的文章中,用的是:templet: statusTpl,这时候要注意 var statusTpl 需要放到table.render()前面,否则也会造成不报错,但不显示按钮情况。
推荐阅读:
1、Java8实现对List<Map<String,Object>>多条件排序
2、Java实现动态生成多级菜单的两种方式
3、layui的弹出框、form表单、表格使用常见问题解决方案
4、layui解决之道——无法获取弹出层中的input的值解决办法
举报/反馈

程序员dulucy

42获赞 105粉丝
菜鸟程序员个人学习分享
关注
0
0
收藏
分享