我有一个由jQuery DataTables增强的动态表,它显示一个类似于example的自定义对象。
JSON:
{
"data": [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": "$320,800",
"start_date": {
"display": "SomeString",
"timestamp": 1303686000
},
"office": "Edinburgh",
"extn": "5421"
},
// ... skipped ...
]}
JavaScript的:
$(document).ready(function() {
$('#example').DataTable( {
ajax: "data/orthogonal.txt",
columns: [
{ data: "name" },
{ data: "position" },
{ data: "office" },
{ data: "extn" },
{ data: {
_: "start_date.display",
sort: "start_date.timestamp"
} },
{ data: "salary" }
]
} );
} );
不同之处在于我动态构建列配置,因为列可以按任何顺序排列,其他列可以在列表中添加或删除。对于这个例子(我的情况非常相似),问题是由于某种原因,timestamp
属性被排序为String而不是作为数字排序。
我发现在将“type”列设置为“number”后,排序完美无缺。我假设DataTables由于某种原因(可能因为显示元素是一个字符串)自动检测列为“String”。
DataTables如何设置列的类型,何时未显式声明?
修改1
我制作了一个示例代码来显示问题 http://jsfiddle.net/Teles/agrLjd2n/16/
答案 0 :(得分:5)
jQuery DataTables具有用于类型检测的内置机制。 various types有多个预定义函数,可以回退到string
数据类型。
也可以使用third-party plug-ins或自己编写。
指定数据类型的方法有多种,下面只有少数几种。
解决方案1
使用type
选项。
$(document).ready(function() {
$('#example').DataTable( {
ajax: "data/orthogonal.txt",
columns: [
{ data: "name" },
{ data: "position" },
{ data: "office" },
{ data: "extn" },
{ data: "start_date.display", type: "date" },
{ data: "salary" }
]
} );
} );
解决方案2
使用返回的JSON数据进行类型检测,有关详细信息,请参阅columns.data
。
$(document).ready(function() {
$('#example').DataTable( {
ajax: "data/orthogonal.txt",
columns: [
{ data: "name" },
{ data: "position" },
{ data: "office" },
{ data: "extn" },
{ data: {
_: "start_date.display",
sort: "start_date.timestamp",
type: "start_date.timestamp",
} },
{ data: "salary" }
]
} );
} );
答案 1 :(得分:3)
DataTables总是检查“data”列的“type”属性以自动检测列的类型,如果没有指定“type”属性,它将检查默认值“_”。
因此,如果您希望DataTables自动检测列的类型,检查“sort”属性的类型,则应将数据的“type”属性设置为等于“sort”值
以下是一个示例code,其中包含不同的approch,以实现我尝试做的事情。谢谢@ Gyrocode.com和@davidkonrad。
{{1}}