DataTables如何确定列类型

时间:2015-08-28 18:50:49

标签: datatables

我有一个由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/

2 个答案:

答案 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}}