数据表ajax按方法排序
Posted
技术标签:
【中文标题】数据表ajax按方法排序【英文标题】:Datatables ajax sort by method 【发布时间】:2017-12-11 23:17:26 【问题描述】:我有一个与 will_paginate 一起使用的基本数据表。
<table id="users" class="display" data-source="<%= url_for(:controller => "/account", :action => :paginate, :format => :json) %>">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Role</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
jQuery 是
<script type="text/javascript">
jQuery(function()
return $('#users').DataTable(
processing: true,
serverSide: true,
ajax: $('#users').data('source'),
columns : [
data: "first_name" ,
data: "last_name" ,
data: "username" ,
data: "role"
]
);
);
</script>
虽然大部分工作都非常好,包括列搜索,但我的角色列却没有。
虽然其他所有内容都是我使用 SQL 查询的属性,但角色是一个方法调用。
def role
return "admin" if self.admin?
return "manager" if self.manager?
return "user"
end
这反过来不适用于列排序。
话虽如此,有没有办法将 will_paginate 和 datatables 与 ajax 一起使用来使用方法输出的自定义排序?我尝试在列上使用data-order
,但似乎不是这样。
【问题讨论】:
【参考方案1】:我使用 will-paginate 有一段时间了,但我停止使用它。尝试只使用 datatables 而不使用分页,因为它内部有分页。
这是代码示例
<script type="text/javascript">
// DO NOT REMOVE : GLOBAL FUNCTIONS!
$(document).ready(function()
var responsiveHelper_dt_basic = undefined;
var responsiveHelper_dt_basic2 = undefined;
var breakpointDefinition =
tablet : 1024,
phone : 480
;
$('#users_table').dataTable(
"sDom": "<'dt-toolbar'<'col-xs-12 col-sm-6'f><'col-sm-6 col-xs-12 hidden-xs'l>r>"+
"t"+
"<'dt-toolbar-footer'<'col-sm-6 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-6'p>>",
"autoWidth" : true,
"preDrawCallback" : function()
// Initialize the responsive datatables helper once.
if (!responsiveHelper_dt_basic)
responsiveHelper_dt_basic = new ResponsiveDatatablesHelper($('#users_table'), breakpointDefinition);
,
"rowCallback" : function(nRow)
responsiveHelper_dt_basic.createExpandIcon(nRow);
,
"drawCallback" : function(oSettings)
responsiveHelper_dt_basic.respond();
,
"iDisplayLength": 50
);
)
</script>
【讨论】:
如果没有服务器端分页,记录大于 1000 的数据表速度非常慢... 有不同的方法可以减少响应时间,例如批量查找或使用您需要查看的数据和计算进行视图。请参阅这篇关于rails中数据库视图的文章melsatar.blog/2017/05/27/… 问题不在于服务器端,数据表是非常占用内存的客户端。我可以在不到 2 秒的时间内生成 10,000 条记录,但客户端将需要超过 30 秒的时间才能将数据表元素附加到其上。 好的,我在一个页面中测试了超过 3000 条记录,其中列出了很多关系,并且它具有可接受的响应时间,甚至没有视图,并且还显示了更多信息。我同意您的观点,如果您在客户端加载数据时出现超时错误,这将是一个问题。以上是关于数据表ajax按方法排序的主要内容,如果未能解决你的问题,请参考以下文章