Layui表格怎么实现根据行数据的不同类型渲染不同的操作列

胖瑶酱_8894

胖瑶酱_8894

2026-04-15

1032人浏览

原创

templet必须是函数,接收行数据d,用if/else动态返回HTML字符串;禁止内联JS和DOM操作,事件需委托绑定;fixed列须设width,空数据要判空。

layui table 的 templet 怎么根据行数据动态渲染操作列

直接用 templet 函数,别写死模板字符串。layui 表格的列模板支持函数返回 html 字符串,这是实现“按类型渲染不同按钮”的唯一可靠方式。

常见错误是试图在 templet 里写纯 HTML 模板并用 {{d.type}} 插值——这只能做静态判断,无法执行逻辑分支;或者把整个渲染逻辑塞进 event 监听里,结果按钮都渲染出来了,只是点击才区分,既浪费 DOM 又容易错乱。

  • templet 必须是函数,形参是 d(当前行原始数据对象)
  • 函数内用 if/else 或 switch 判断 d.status、d.category 等字段值
  • 返回字符串,不要拼接 document.createElement 或调用 laytpl
  • 避免在 templet 中发起请求或修改全局状态,它只负责“画出来”
templet: function(d) {
  if (d.status === 'draft') {
    return '<button class="layui-btn layui-btn-xs">编辑</button>';
  } else if (d.status === 'published') {
    return '<button class="layui-btn layui-btn-xs layui-btn-disabled">已发布</button><button class="layui-btn layui-btn-xs layui-btn-danger">下架</button>';
  }
  return '<span class="layui-badge-rim">未知</span>';
}

为什么不能用 toolbar + event 替代 templet

因为 toolbar 是整表级配置,它生成的是固定结构的工具栏(比如顶部批量操作),不是每行独立的操作列;而 event 是监听事件用的,它不控制“渲染什么”,只管“点到谁”。想让每行按钮长得不一样,必须从源头——也就是列的渲染逻辑——下手。

典型翻车场景:有人把所有按钮都渲染出来,再用 event 绑定一堆 if (d.status === 'xxx') {...} 去控制点击行为。这样按钮 DOM 全在,只是视觉上靠 display:none 隐藏,不仅增加 DOM 负担,还容易因状态更新不及时导致按钮误显或点击失效。

  • toolbar 适合全表统一操作(如“导出全部”)
  • event 只响应点击,不参与渲染决策
  • 操作列的差异必须在 templet 函数里完成,且应尽量轻量
  • 如果按钮逻辑复杂(比如要弹窗带表单),templet 里只放触发元素,具体逻辑抽到外部函数里

templet 返回的 HTML 里怎么安全绑定事件

不能用 onclick="xxx()" 写内联 JS,也不推荐在 templet 里写 addEventListener —— 因为表格重绘(如分页、搜索、reload)会销毁旧节点,但事件监听器未必被清除,造成内存泄漏或重复绑定。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

正确做法是用事件委托:在表格容器或 table 标签上监听,用属性(如 data-id、data-action)标识按钮用途,再通过 e.target 拿到对应行数据。

  • 在 templet 里给按钮加 data-action="edit" 和 data-id="{{d.id}}"(注意:这里用双大括号是 laytpl 语法,仅当 templet 是字符串模板时有效;函数模板请直接拼字符串)
  • 初始化表格后,用 layui.$(‘#your-table’).on(‘click’, ‘[data-action]’, …) 统一处理
  • 点击时通过 e.target.dataset.id 拿 ID,再用 table.cache 或接口查完整数据(因为 d 在 templet 里是快照,可能不是最新)
  • 避免在事件回调里直接操作 e.target.parentNode 找行数据,DOM 结构不稳定

Layui 2.8+ 的 cols 配置里哪些字段会影响 templet 行为

templet 不是孤立工作的,它和 unresize、hide、minWidth 这些字段共存时有隐含约束。最容易被忽略的是 width 和 fixed。

比如设置了 fixed: 'right' 的操作列,如果没设 width,在某些分辨率下会被压缩变形,导致按钮挤成一团甚至文字换行;又比如用了 unresize: true 却忘了操作列宽度不够,用户拖拽其他列时它会突然撑开,破坏布局。

  • fixed: 'right' 的列必须显式设 width(建议最小 140px 起)
  • templet 返回内容过长时,优先加 white-space: nowrap 和 overflow: hidden 控制样式,而不是硬调宽
  • 如果操作列包含图标(如 <i class="layui-icon"></i>),确保引入了 layui.css 且未被其他样式覆盖
  • minWidth 对 templet 无效,它只约束列头宽度,实际内容仍由你返回的 HTML 决定

最麻烦的其实是异步数据回来前的空状态——templet 会在每一行都执行,包括 loading 行和空数据行,所以函数开头最好加 if (!d || !d.id) return ''; 防止报错。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2343

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5043

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6130

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5658

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

803

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2660

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

340

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2493

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1141

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.8万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习