initSort是Layui表格强制配置项,必须以{field:'xxx',type:'asc'|'desc'}格式置于render顶层;仅当对应列设sort:true且字段名与后端JSON严格一致时才生效,服务端排序需配合reload及where参数传递。
initSort 必须显式配置,否则表格加载时不会按任何字段排序
很多人以为只要列里写了 sort: true,表格一加载就会自动按该字段排好——这是错的。Layui 表格默认完全不排序,initSort 不写,哪怕你点了十次表头,首次渲染永远是原始顺序。
initSort 必须是对象,格式为 {field: 'xxx', type: 'asc'} 或 {field: 'xxx', type: 'desc'}
field 必须和列定义中的 field 完全一致(大小写、下划线都不能错)type 只支持 'asc' 和 'desc',不能写 'ascending' 或 1
{field: ['name','age'], type: 'asc'} 会直接失效如果你开了 autoSort: false 并监听 sort 事件做服务端排序,initSort 就不只是“初始化用”,它还决定表头图标是否显示箭头状态。漏掉它,用户点完一次再刷新页面,表头就“忘记”刚才按哪列排了。
table.reload() 中必须传入 initSort: obj(即事件回调里的 obj)where:如 where: { sortField: obj.field, sortOrder: obj.type }
明明写了 initSort 却没生效?大概率掉进了下面这三个坑:
url 加载数据,但后端接口本身已返回预排序结果 —— 这会导致前端排序被掩盖,应确保后端不预排序,或加 autoSort: false 明确交由后端控制sort: true,initSort 只对启用了排序的列生效,否则表头连图标都没有,更别说初始排序initSort 写在了 cols 里,或者当成列属性写进了某个 field 配置中 —— 它只属于 table.render() 的顶层配置项最常被忽略的一点:initSort 的字段名必须和后端返回的 JSON 字段名严格一致;如果后端返回的是 user_name,但你写成 userName,排序逻辑就彻底断掉了。