【发布时间】: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