DataTables如何确定列类型

Raf*_*les 6 datatables

我有一个由jQuery DataTables增强的动态表,它显示一个类似于这个例子的自定义对象.

JSON:

{
  "data": [
    {
      "name": "Tiger Nixon",
      "position": "System Architect",
      "salary": "$320,800",
      "start_date": {
        "display": "SomeString",
        "timestamp": 1303686000
      },
      "office": "Edinburgh",
      "extn": "5421"
    },
    // ... skipped ...
]}
Run Code Online (Sandbox Code Playgroud)

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" }
        ]
    } );
} );
Run Code Online (Sandbox Code Playgroud)

不同之处在于我动态构建列配置,因为列可以按任何顺序排列,其他列可以在列表中添加或删除.对于这个例子(我的情况非常相似),问题是由于某种原因,该timestamp属性被排序为String而不是作为数字排序.

我发现在将"type"列设置为"number"之后,这个顺序完美无缺.我假设DataTables由于某种原因(可能因为显示元素是一个字符串)自动检测列为"String".

DataTables如何设置列的类型,何时未显式声明?

编辑1

我做了一个示例代码来显示问题 http://jsfiddle.net/Teles/agrLjd2n/16/

Gyr*_*com 6

jQuery DataTables具有用于类型检测的内置机制。有多种预定义的功能可用于各种类型,并具有string数据类型的备用功能。

也可以使用第三方插件或编写自己的插件

有多种方法可以指定数据类型,以下仅是其中几种。

解决方案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" }
        ]
    } );
} );
Run Code Online (Sandbox Code Playgroud)

解决方案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" }
        ]
    } );
} );
Run Code Online (Sandbox Code Playgroud)