【问题标题】:datatables sort by column name数据表按列名排序
【发布时间】:2021-03-07 22:37:19
【问题描述】:

很快,在应用排序或搜索时,我需要使用列名而不是列号。 我知道它没有实现,开发人员多次表示他将在下一个版本中支持它,但我现在正在考虑。 我正在使用服务器端分页,所以我正在使用 ajax.data。 我只需向数据表发送的 d.order[0] 对象添加新值。 这是我的伪:

vat table = $('#foo').DataTable({
"processing": true, 
"serverSide": true,
"ajax": {
 "url": uri_api,
 "method": "POST",
 "data": function(d) {
   if len(table.columns(0).data.tfoot.placeholder)>0 than d.order[0]['col_name']='col0name'
   if len(table.columns(1).data.tfoot.placeholder)>0 than d.order[1]['col_name']='col1name'
   return json.stringify(d);
 }
"columns": [
  { "data": "bar" },
  { "data": "baz" }
 ]
});

这是纯伪代码,我不知道如何编码。还有纯js。如果在 ajax 部分我使用 $(this) 它使用整个 jquery 库。 有什么提示吗?

【问题讨论】:

  • 当您使用"serverSide": true 时,您在服务器上应用排序、过滤和分页逻辑,而不是在浏览器中 - 然后服务器返回相关的排序/过滤/分页数据作为其响应。服务器使用从 DataTables 自动发送的请求数据来执行此操作。请参阅server-side processing 文档的“发送参数”部分。
  • 当服务器端为真时,后端不处理它而只是回答。要做到这一点,服务器需要共享一个表结构,因为数据表发送基数整数来过滤或排序它的数据。这是一个很大的限制,因为我无法隐藏或移动列,因为它会破坏以前与服务器共享的表结构。
  • 因为如果我在 db 中有三列,它们是 0 foo、1 bar、2 baz。相反,Datatable 知道 1 foo 2 bar 3 baz,所以如果我在 bar 之后移动 foo,新的表结构将是 0 bar 1 foo 2 baz,这仅在前端。后端不知道这个变化,后端会一直知道 0 foo 1 bar 2 baz
  • 如果你give names to your columns,那么请求将包含你需要的数据。请参阅我在第一条评论中分享的链接中的columns[i][name] 参数。使用它,您将知道哪一列(按名称)在哪个位置(按索引)。
  • 抱歉 - 这是我上次评论中的错误链接。这是正确的:columns.name

标签: javascript sorting datatable


【解决方案1】:

非常感谢 andrewjames,我解决了我的问题,而且工作速度也很快! 根据他的提示,我搜索了“带有 ajax 数据的数据表列名称”,我找到了这个链接: Using column names with DataTables with AJAX data source 基本上我没有遵循带有绿旗的解决方案,该解决方案对我不起作用。 我用了ahmeti的答案,我添加了这行:

fnServerParams: function(data) {
    data['order'].forEach(function(items, index) {
        data['order'][index]['column_name'] = data['columns'][items.column]['data'];
  });
},

问候。

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多