JQuery DataTables:添加 columnDefs 后无法对列进行排序
JQuery DataTables: Unable to sort column after adding columnDefs
我的 Rails 应用程序中有一个 table,它显示单列日期,以美国长格式(月 DD,YYYY)书写。
使用默认数据表,我注意到这些日期字符串是按字母顺序排序的,而不是按日期排序的。单击列 header 将按预期按字母顺序对这些字符串进行升序或降序排序。
我试图通过修改我的 CoffeeScript 以包含 columnDef 来让数据table 正确地按日期排序,如下所示:
$('.scheduled_activities').dataTable(
columnDefs: [ { 'type': 'date', 'targets': 0 } ]
)
更改脚本后,数据table 现在以升序显示日期。然而,单击 header 列完全没有任何作用 -- 日期未按降序排列。
如何获取数据table以将列值识别为日期,同时通过单击列 header 保留按 asc/desc 顺序排序的能力?我正在使用 JQuery 1.11.2,并且我想坚持使用尽可能少的依赖项的解决方案,因此使用像 moment.js 这样的库是最后的选择。感谢您的帮助。
不确定咖啡语法,但在 javascript 中该语法无效。缺少 {}
来定义对象 columnDefs
是 属性 的
$('.scheduled_activities').dataTable({
columnDefs: [ { 'type': 'date', 'targets': 0 } ]
});
DataTables 无法对我的列进行排序,因为列中的日期实际上是 link 通过 Rails link_to
助手创建的,而不是简单的字符串。
我为我的 columnDefs
尝试了不同的 types,但其中 none 可以正确解释 link 的列。我突然想到我可以 de-link 日期字符串并创建第二列,其中 link_to
link 编辑到日期所指的 object。虽然这种方法在技术上满足了日期都是 sortable 的要求,同时提供了对底层 object 的访问,但在第二列中有一系列 link 在美学上令人不快,主要是因为 [我的应用程序中其他 table 的 =43=] 强制用户单击辅助 link。
碰巧,DataTables 1.10+ can leverage HTML 5 data attributes提供了一条数据用于排序,同时在<td>
标签之间显示了一条不同的数据。
旧代码:
<% @schedulable_activities.each do | activity | %>
<tr>
<td>
<%= link_to "#{localize_date(activity.start_date)}", activity_path(activity) %>
</td>
</tr>
<% end %>
新代码:
<% @schedulable_activities.each do | activity | %>
<tr>
<td data-order="<%= activity.start_date%>">
<%= link_to "#{localize_date(activity.start_date)}", activity_path(activity) %>
</td>
</tr>
<% end %>
注意 <td>
标签中的 data-order
属性。
通过此更改,我可以恢复到 "plain Jane" 调用 DataTables,而不必完全依赖 columnDefs
:
$ ->
$('.scheduled_activities').dataTable()
现在我得到一个 table,它通过单击列 header 正确地按日期按升序和降序排序,以及直接 link 到 object 与日期关联。
选项 1:
如果您查看 https://www.datatables.net/manual/options,有一个选项可以将 order 设置为 true 或 false,只需将 order 设置为 false。
//Example
$('#example').DataTable( {
ordering: false
} );
Here we disable the ordering feature of DataTables by
default, you can even disable searching by setting 'searching' to false
选项 2
如果您发现选项一中禁用了列排序,请将 ordering: false 行替换为 "aaSorting":[] 所以变成:
$('#example').DataTable( {
"aaSorting": []
} );
有关选项 2 的更多信息,请参阅此文档 https://legacy.datatables.net/ref#aaSorting
我的 Rails 应用程序中有一个 table,它显示单列日期,以美国长格式(月 DD,YYYY)书写。
使用默认数据表,我注意到这些日期字符串是按字母顺序排序的,而不是按日期排序的。单击列 header 将按预期按字母顺序对这些字符串进行升序或降序排序。
我试图通过修改我的 CoffeeScript 以包含 columnDef 来让数据table 正确地按日期排序,如下所示:
$('.scheduled_activities').dataTable(
columnDefs: [ { 'type': 'date', 'targets': 0 } ]
)
更改脚本后,数据table 现在以升序显示日期。然而,单击 header 列完全没有任何作用 -- 日期未按降序排列。
如何获取数据table以将列值识别为日期,同时通过单击列 header 保留按 asc/desc 顺序排序的能力?我正在使用 JQuery 1.11.2,并且我想坚持使用尽可能少的依赖项的解决方案,因此使用像 moment.js 这样的库是最后的选择。感谢您的帮助。
不确定咖啡语法,但在 javascript 中该语法无效。缺少 {}
来定义对象 columnDefs
是 属性 的
$('.scheduled_activities').dataTable({
columnDefs: [ { 'type': 'date', 'targets': 0 } ]
});
DataTables 无法对我的列进行排序,因为列中的日期实际上是 link 通过 Rails link_to
助手创建的,而不是简单的字符串。
我为我的 columnDefs
尝试了不同的 types,但其中 none 可以正确解释 link 的列。我突然想到我可以 de-link 日期字符串并创建第二列,其中 link_to
link 编辑到日期所指的 object。虽然这种方法在技术上满足了日期都是 sortable 的要求,同时提供了对底层 object 的访问,但在第二列中有一系列 link 在美学上令人不快,主要是因为 [我的应用程序中其他 table 的 =43=] 强制用户单击辅助 link。
碰巧,DataTables 1.10+ can leverage HTML 5 data attributes提供了一条数据用于排序,同时在<td>
标签之间显示了一条不同的数据。
旧代码:
<% @schedulable_activities.each do | activity | %>
<tr>
<td>
<%= link_to "#{localize_date(activity.start_date)}", activity_path(activity) %>
</td>
</tr>
<% end %>
新代码:
<% @schedulable_activities.each do | activity | %>
<tr>
<td data-order="<%= activity.start_date%>">
<%= link_to "#{localize_date(activity.start_date)}", activity_path(activity) %>
</td>
</tr>
<% end %>
注意 <td>
标签中的 data-order
属性。
通过此更改,我可以恢复到 "plain Jane" 调用 DataTables,而不必完全依赖 columnDefs
:
$ ->
$('.scheduled_activities').dataTable()
现在我得到一个 table,它通过单击列 header 正确地按日期按升序和降序排序,以及直接 link 到 object 与日期关联。
选项 1: 如果您查看 https://www.datatables.net/manual/options,有一个选项可以将 order 设置为 true 或 false,只需将 order 设置为 false。
//Example
$('#example').DataTable( {
ordering: false
} );
Here we disable the ordering feature of DataTables by default, you can even disable searching by setting 'searching' to false
选项 2 如果您发现选项一中禁用了列排序,请将 ordering: false 行替换为 "aaSorting":[] 所以变成:
$('#example').DataTable( {
"aaSorting": []
} );
有关选项 2 的更多信息,请参阅此文档 https://legacy.datatables.net/ref#aaSorting