我正在使用dataTables plugin来处理列的排序。
尝试应用multi-column ordering我在控制台中收到以下错误:
未捕获的TypeError:无法读取未定义的属性'sType'
由于文档在这方面不是很明确,并且没有包含太多此功能的示例,我不知道问题出在哪里。
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [[0, 'asc'],[1, 'asc']],
targets: [1]
}]
});
答案 0 :(得分:4)
<强>原因强>
选项columns.orderData应该是索引数组,见下文:
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [0, 1],
targets: [1]
}]
});
请参阅updated JSFiddle进行演示。
虽然Multi-column ordering示例页面提到您可以使用[ [0,'asc'], [1,'asc'] ]
,但它与columns.orderData的手册相矛盾。
似乎是代码或手册的问题。通过查看DataTables源代码,我发现它只接受没有排序方法的索引数组。
<强>详情
为jQuery DataTables创建了一个关于此问题的new issue #591。
现在confirmed问题是Multi-column ordering示例页面上的错误陈述。
解决方法强>
解决方法是绑定到order事件,并根据需要使用order()方法重新排序表,除了列索引之外还接受排序方法。
var table = $('#demo').DataTable({
paging: false,
ordering: true
});
$('#demo').on('order.dt', function(){
var order = table.order();
if(order[0][0] === 1){
table.order([0, 'asc'],[1, 'asc']).draw();
}
});
请参阅this JSFiddle进行演示。
答案 1 :(得分:1)
似乎多列顺序可以在dataTables中使用:
这总结了所有过程:
$('#demo').DataTable({
ordering: true,
order:[[0, 'asc'],[1, 'asc']], // Set initial order
orderFixed: [ 0, 'asc' ], // Always use the first column for ordering
"columnDefs": [
{ "orderable": false, "targets": 0 } // Don't let the first column order to be changed
]
});
看到它正常工作MSVC documentation。