layui.table.reload() 是唯一可靠的手动重绘表格方式,它使已有实例按当前配置重新请求数据并渲染,避免事件丢失、分页错乱等问题,需传入原始 id,参数如 page、where、data 等影响重绘行为。
layui.table.reload() 是唯一可靠方式
手动重绘表格,不是刷新页面、也不是重新初始化实例,而是让已存在的 table 实例根据当前配置重新请求数据并渲染。layui 官方只提供 table.reload() 这个方法,其他诸如 table.render() 重复调用、或操作 dom 强制重绘,都会导致事件丢失、分页错乱、甚至报错 uncaught typeerror: cannot read property 'config' of undefined。
常见错误现象包括:点击按钮后表格没变化、分页器卡在第一页、复选框状态错位、工具栏按钮点击失效。
- 必须传入原始
id(即render时的id值),不能传错或漏写 - 如果表格是异步加载(
url配置了接口),重绘会自动触发新请求;如果是静态数据(data配置),需显式传入新data - 不传任何参数调用
table.reload('demo')会按原配置重载,适合仅刷新数据场景
reload() 中哪些参数会影响重绘行为
重绘不是“刷新视图”,而是重建表格逻辑链。传参不同,行为差异很大:
-
page:设为{curr: 1}会强制回到第一页;不传则保持当前页码 -
where:用于动态传参给后端,比如搜索条件变更后重绘,必须放在这里而不是拼在url字符串里 -
data:仅当原始表格用的是本地data(非url)才生效;传空数组或新数组会直接替换数据源 -
height或width:修改会导致表格容器重计算,可能触发滚动条闪动,慎用
示例:搜索后重绘并重置分页
table.reload('demo', { where: { keyword: $('#keyword').val()}, page: {curr: 1} });
为什么 table.cache 不更新、reload 后还是旧数据
这不是 bug,是设计机制:Layui 表格的 cache 是只读缓存,由首次加载或每次 reload 后自动填充,不能手动修改。如果你在 reload 前改了 table.cache['demo'],reload 时会被新响应覆盖,白改。
真正需要“预处理数据”的场景,应该在 parseData 回调里做:
-
parseData在接收到响应后、写入cache前执行,适合过滤、格式转换 - 不要试图在
done回调里改cache,此时渲染已完成,改了也无用 - 若后端返回结构不符合 Layui 要求(如根字段不是
data或count),必须用response配置映射字段,否则 reload 会解析失败
表格重绘后事件绑定失效怎么办
这是最常被忽略的点:Layui 的 on('tool(demo)', ……)、on('checkbox(demo)', ……) 等事件监听,绑定在表格容器上,依赖事件委托。但 reload 后容器 DOM 被完全替换,旧监听器就丢了。
解决方法只有一个:所有事件监听必须放在 reload 之后,或统一收口到初始化函数里,确保每次 reload 完都重新绑定。
- 不要把
table.on('tool(……)写在table.render()外部且只执行一次 - 推荐写法:封装一个
bindTableEvents()函数,在render后和每次reload的done回调里都调用它 - 如果用了
elem: '#demo'手动指定容器,reload 后记得确认该 DOM 是否还存在——某些模板框架(如 Vue)可能销毁并重建节点,导致elem失效
事情说清了就结束






























