1

Я в настоящее время пытаюсь реализовать этот вид таблицы: https://datatables.net/examples/server_side/row_details.htmlDataTables Row Деталь строка() не определен

я копия/паста примера Javascript, чтобы добавить его к моему столу, но он держит сбой на этом :

$("#dyntable2 tbody").on("click", "tr td.details-control", function() { 
       var tr = $(this).closest("tr"); 
       var row = dt.row(tr); <<< At this line 

С этой ошибкой: "Uncaugth TypeError: не определено не является функцией (анонимная функция)"

EDIT: Вот полный JavaScript:

var $ = jQuery.noConflict(); 

    function format(d) { 
     return 'Flow Name + Id: ' + d.Flow.Name + ' ' + d.Flow.Id + '<br>' + 
      'Id Session: ' + d.Id + '<br>' + 
      'Placeholder for now, quick monitoring tool after'; 
    } 

    $(document).ready(function() { 

     var dt = $('#dyntable2').dataTable({ 
      lengthMenu: [[10, 25, 50, -1], ["10", "25", "50", "All"]], 
      processing: true, 
      searching: true, 
      paging: true, 
      pagingType: "full_numbers", 
      serverSide: true, 
      ajax: { 
       url: "url", 
       type: "POST" 
      }, 
        language: { 
       url: "jquery/datatables/French.txt" 
      }, 
      columns: [ 
       { 
        "class": "details-control", 
        data: null, 
        orderable: false, 
        defaultContent: "" 
       }, 
       [...] 
      ] 
     }); 

     var detailsRows = []; 

     $("#dyntable2 tbody").on("click", "tr td.details-control", function() { 
      var tr = $(this).closest("tr"); 
      var row = dt.row(tr); 
      var idx = $.inArray(tr.attr("id"), window.detailRows); 

      if (row.child.isShown()) { 
       tr.removeClass("details"); 
       row.child.hide(); 

       // Remove from the 'open' array 
       window.detailRows.splice(idx, 1); 
      } else { 
       tr.addClass("details"); 
       row.child(format(row.data())).show(); 

       // Add to the 'open' array 
       if (idx === -1) { 
        window.detailRows.push(tr.attr("id")); 
       } 
      } 
     }); 

     // On each draw, loop over the `detailRows` array and show any child rows 
     dt.on("draw", function() { 
      $.each(window.detailRows, function(i, id) { 
       $("#" + id + " td.details-control").trigger("click"); 
      }); 
     }); 

    }); 

Как я могу решить эту проблему, так как я использовал тот же код, что и в примере?

+0

Вы уверены, что dt определен? Нужно больше кода, чтобы помочь ... – Glen

+0

Я добавил javascript, я просто удалил определение столбцов для цели удобочитаемости – Revv

ответ

3

В вашем коде dt является объектом jQuery, который не имеет функции row(). Используйте API с dt.api().row(tr), чтобы получить строку.

PS: Это изменение от версии 1.10 и до 1.11.

+0

Он работал благодаря большому количеству :) – Revv