initSort必须写在table.render()顶层配置中,格式为{field:'xxx',type:'asc'}/{field:'xxx',type:'desc'},且对应列需设sort:true、后端不预排序、autoSort:false(服务端排序时)。
initsort 必须写在 table.render() 的顶层配置里,格式严格为 {field: 'xxx', type: 'asc'} 或 {field: 'xxx', type: 'desc'},漏一个字母、错一个引号、多一个逗号都会失效。
initSort 必须是顶层对象,不能塞进 cols 或列定义里
很多人把 initSort 写成某列的属性,比如:
cols: [[
{field: 'name', title: '姓名', sort: true, initSort: {field: 'name', type: 'asc'}} // ❌ 错!initSort 不属于列配置
]]
正确位置只有一处:和 elem、cols、url 并列的顶层:
table.render({
elem: '#demo',
cols: [[{field: 'name', title: '姓名', sort: true}]],
initSort: {field: 'name', type: 'asc'}, // ✅ 正确:顶层、独立、对象
url: '/api/list'
});
-
initSort不支持数组、字符串、null,只接受且仅接受一个对象 - 哪怕你只用一次,也必须显式写出,不写就等于没排序逻辑
- 字段名
field必须和列定义中的field完全一致(大小写、下划线、空格都不能差)
initSort 生效的三个硬性前提
写了但没反应?大概率卡在这三步上:
- 对应列必须设
sort: true—— 没这个,表头连排序图标都不显示,initSort直接被忽略 - 后端返回的数据不能自带排序 —— 如果接口已按
updated降序返回,前端再设initSort: {field: 'updated', type: 'desc'}看不出变化,实际是被掩盖了 - 没开
autoSort: false却想纯服务端排序 —— 默认autoSort: true会触发前端自动重排,干扰服务端逻辑;该关就得关
服务端排序时 initSort 要配合 reload 和 where 传参
如果你监听 sort 事件做服务端排序,initSort 就不只是“第一次怎么排”,它还决定了刷新后表头箭头状态是否还原:
- 在
sort回调里拿到obj(含field和type),必须原样传给table.reload()的initSort - 同时把排序参数塞进
where,例如:where: {sortField: obj.field, sortOrder: obj.type} - 后端必须真按这两个字段排序,否则前端只是“假装在排”——数据顺序没变,表头图标却动了
常见拼写/语法错误直接导致失效
这些看着像对,其实全挂:
- 写成
type: 'ascending'或type: 1—— 只认'asc'和'desc' -
field: 'user_name'但后端 JSON 里是userName—— 字段名不匹配,排序逻辑彻底断掉 - 加了多余逗号:
initSort: {field: 'id', type: 'asc',}—— IE 或旧版浏览器可能报错 - 用单引号包住整个对象:
initSort: "{field: 'id', type: 'asc'}"—— 变成字符串,不是对象
最稳的做法:复制粘贴标准模板,只改 field 和 type 两个值,其余字符一个不动。


















