Datatables file-size插件实现文件大小排序报错求助
我来帮你排查这个DataTables文件大小排序的问题,核心问题出在列配置的语法错误上,你把columnDefs的配置格式混到columns数组里了,导致插件无法正确识别配置。
错误原因分析
你当前的columns数组里直接放了{ "type": "file-size", "targets": 2 },但targets是columnDefs专属的配置项,用来批量指定列,不能直接放在columns的单个列配置里。DataTables无法解析这种混合写法,所以触发了报错。
修正方案
有两种正确的配置方式,选一种适合你的:
方式1:直接在目标列的配置中指定type
把file-size类型直接定义在第三列(索引2,对应你的大小列)的配置对象里:
orderAttachmentsDTO[orderItemID] = $attachmentsTable.DataTable({ destroy:true, data:itemAttachments, columns:[ orderAttachmentsMap, // 第一列配置 // 如果有第二列,这里放第二列的配置对象 { title: ax.L(713), class:'size', data:function(row, type, val, meta) { if (row.file) { return ax.Utils.fileSizeString(row.file.size); } }, type: 'file-size' // 在这里指定文件大小类型 } ], autoWidth:false, order: [[ 0, 'asc' ]], paging:false, dom:'ft', searching: false, language: { emptyTable: ax.L(911), zeroRecords: ax.L(911) } });
方式2:使用columnDefs单独配置类型
如果需要给多个列统一配置类型,或者想让列配置更清晰,用columnDefs来指定目标列的类型:
orderAttachmentsDTO[orderItemID] = $attachmentsTable.DataTable({ destroy:true, data:itemAttachments, columns:[ orderAttachmentsMap, // 第一列配置 // 如果有第二列,这里放第二列的配置对象 { title: ax.L(713), class:'size', data:function(row, type, val, meta) { if (row.file) { return ax.Utils.fileSizeString(row.file.size); } } } ], columnDefs: [ { type: 'file-size', targets: 2 } // 明确指定第三列(索引2)使用file-size类型 ], autoWidth:false, order: [[ 0, 'asc' ]], paging:false, dom:'ft', searching: false, language: { emptyTable: ax.L(911), zeroRecords: ax.L(911) } });
额外注意事项
- 确保你已经正确引入了DataTables的
file-size插件脚本(比如dataTables.fileSize.js),如果遗漏引入,插件功能也会失效。 - 你的渲染函数返回的格式化字符串(比如
"2.5 MB")完全符合file-size插件的识别格式,插件会自动解析这些字符串并进行正确的数值排序,不需要额外处理原始大小数值。
内容的提问来源于stack exchange,提问作者erics15
相关产品推荐
相关产品推荐

