必须在templet中生成带唯一id的容器,并在done回调里用rate.render()逐个绑定,否则星级不渲染;id需合法(仅字母、数字、短横线),可用d.id或layui.table.cache索引生成。
必须在 templet 中生成带唯一 id 的容器,再在 done 回调里用 rate.render() 逐个绑定,否则星级不会渲染出来。
列模板必须返回带唯一 ID 的 <div>
<p>表格列不能直接写死 <code><div id="star1"></div>,因为所有行会共用同一个 ID,导致只有第一行生效。正确做法是用数据项的唯一字段(如 d.id 或 d.rowIndex)拼出 ID:
templet: function(d) { return '<div id="star-' + d.id + '"></div>'; }
- 如果后端没返回
id 字段,可用 layui.table.cache 的索引:'<div id="star-' + d.LAY_TABLE_INDEX + '"></div>'
- ID 值必须是合法 CSS ID(不能含空格、特殊符号),建议只用字母、数字、短横线
done 回调中循环调用 rate.render()
templet: function(d) { return '<div id="star-' + d.id + '"></div>'; }id 字段,可用 layui.table.cache 的索引:'<div id="star-' + d.LAY_TABLE_INDEX + '"></div>'
done 回调中循环调用 rate.render()
done 是表格数据渲染完成后的唯一可靠时机,此时 DOM 已就位,且能拿到完整数据集。别在 render 外部或 init 阶段调用 —— 容器还没生成,rate.render() 会静默失败:
- 确保已通过
layui.use(['rate'])加载模块 - 循环时注意:用
for (var i = 0; i ,避免 <code>for...in遍历对象引发意外属性 - 关键参数必须传对:
elem要严格匹配模板中生成的 ID,例如'#star-' + res.data[i].id - 如果评分值是小数(如 4.5),必须设
half: true,否则会向下取整为 4
只读展示场景下别漏掉 readonly: true
数据表格里的星级通常是只读展示,不是让用户重新打分。如果不加 readonly: true,鼠标悬停会有高亮、点击会触发 choose 回调,干扰用户操作,还可能误触发保存逻辑:
rate.render({ elem: '#star-' + d.id, value: d.score, readonly: true, half: true, theme: '#009688' });- 主题色
theme建议统一,避免和表格默认色冲突;text: false更干净,除非业务明确要求显示“4.5星”文字 - 若某行
score字段为空或非数字,value传0或跳过渲染,否则会报错或显示异常
最容易被忽略的是 ID 的唯一性与 done 的执行时机 —— 两者只要一个出错,整列星级就全白屏,且控制台不报错,只能靠打断点或检查元素确认容器是否存在。











