数据表子行不显示

Datatables child row not showing

我在数据tables Sliding Child Rows 上关注此博客 post,但我无法在单击时显示我的行。我只想能够显示单击第一列时的子行。我做错了什么?

我的jQuery

<script type="text/javascript">
  $(document).ready(function(){
    $('#products').DataTable({
      "lengthMenu": [[20, 50, 100, 500, -1], [20, 50, 100, 500, "All"]],
      "columnDefs": [{ className: "details-control", "targets": [ 0 ] }]
    });
  });
</script>

<script type="text/javascript">
  $('#products tbody').on('click', 'td.details-control', function () {
    var tr = $(this).closest('tr');
    var row = table.row( tr );

    if ( row.child.isShown() ) {
        // This row is already open - close it
        $('div.slider', row.child()).slideUp( function () {
            row.child.hide();
            tr.removeClass('shown');
        } );
    }
    else {
        // Open this row
        row.child( format(row.data()), 'no-padding' ).show();
        tr.addClass('shown');

        $('div.slider', row.child()).slideDown();
    }
  } );
</script>

然后 table 本身带有一些要显示的虚拟数据

<table id="products" class="table table-striped table-hover table-bordered 
  table-condensed">
    <thead>
     <tr>
      <th> </th>        
      <th> </th>
      <th><a>TITLE</a></th>
      <th><a>ASIN</a></th>
      <th><a>PRICE</a></th>
      <th><a>SKU</a></th>
      <th> </th>
      <th> </th>
     </tr>
   </thead>

   <tbody class="product-index">

   <% @merchant.products.each do |product| %>
     <tr>
       <td>+
         <div class="slider" name>
           <table>
             <tr>
               <td>
               ... Data to be shown ...
               </td>
             </tr>
           </table>
         </div>
       </td>
       <td><%= check_box_tag('sellersku[]', product.sellersku) %></td>
       <td><%= product.title %></td>
       ...
   <% end %>
  </tbody>
</table>

首先,您缺少 table 参考,即 var table = $('#products').DataTable()

您还需要实际插入子行的内容。 dataTables 子行是动态插入的——您不能像标记指示的那样使用静态内容。通常,您会使用子行的 return 内容的函数,通常称为 format(data) (并且您实际上在复制的代码中引用了此类函数),其中 data 是父行本身。但是你可以随心所欲地做。下面是您对问题的标记:

function format(data) {
    return '<div class="slider" name>'+
           '<table>'+
             '<tr>'+
               '<td>'+
               '... Data to be shown ...'+
               '</td>'+
             '</tr>'+
           '</table>'+
         '</div>'
}

这两个更改使您的代码工作,包括幻灯片效果 -> http://jsfiddle.net/LmudsL36/