我在Rails应用程序中使用DataTable。
DataTable Partial
<% if @messages.present? and @messages.length > 0 %>
<h4><%= t('labels.message')%></h4>
<table id="messages_table" class="table table-striped table-bordered display">
<thead>
<tr>
<th ></th>
<th class="hide"></th>
<th class="hide"></th>
<th><strong><%= t('labels.date')%> </strong></th>
<th><strong><%= t('labels.sender')%> </strong></th>
<th><strong><%= t('labels.subject')%> </strong></th>
<th><strong><%= t('labels.action')%></strong></th>
</tr>
</thead>
<tbody>
<% @messages.each do |message| %>
<tr>
<td class="center" style="min-width:20px;"><img src="/assets/details_open.png" rel="<%= message.id %>"></td>
<td class="hide"><%= message.body.html_safe %></td>
<td style="display:none"><%= message.created_at.to_i %></td>
<td><%= parse_datetime(message.created_at.to_s, :dtconcise) %> </td>
<td><%= message.sender %></td>
<td><%= message.subject %></td>
<td>
<%= link_to("Delete", delete_message_path(message) ,:class => "table2",
:confirm => t('confirmation.delete_message')) %>
</td>
</tr>
<% end %>
</tbody>
</table>
-------------------------------------------------- -----------------
On当我点击此表的任何'tr'的第一个'td'上的图像时首次加载(每个第一个'td'都有一个图像),然后第二个'td'数据将显示在下面一个单独的行中这个'tr',默认第二个'td'将隐藏意味着第二个'td'数据将隐藏/显示在'td'图像点击上。
主要问题在于,当我使用ajax进行分页然后将表格部分渲染然后隐藏/显示数据时,点击任何'tr'的第一个'td'都不起作用。为此我再次重新初始化dataTable。
我编写了像分页后的代码,以便在'get_message.js.erb'文件中的特定DIV上呈现结果。
$('#message_list').html('<tr><td colspan="5"><h5 style="text-align: center; margin-top: 100px;"><%= t('messages.no_result_found') %></h5></td></tr>');
$('#paginator_message').html('');
$('#message_list').html('<%= escape_javascript render(:partial =>"messages_list", :format => [:html]) %>');
$('#paginator_message').html('<%= escape_javascript(paginate(@messages, :params => {:controller => 'dashboard', :action => 'get_messages'}, :remote => true).to_s) %>');
oTable = $('#message_list').find("#messages_table").dataTable({
aoColumnDefs: [
{
bSortable: false,
aTargets: [0, 6]
}
],
aaSorting: [[3, "desc"]],
"aoColumns": [
{
"iDataSort": null
}, {
"iDataSort": null
}, {
"iDataSort": 2
}, {
"iDataSort": 2
}, {
"iDataSort": 4
}, {
"iDataSort": 5
}, {
"iDataSort": null
}
],
"bPaginate": false,
"bInfo": false,
"bFilter": false,
"bRetrieve" : true,
"bProcessing" : true
});
oTable.fnDraw();
messageLoad(oTable);
在我们点击DataTable的第一个td后,它会给出错误,如: “未捕获的TypeError:无法读取属性'aoData'的null”