2015-05-08 18 views
7

Próbuję powiązać tabelę podrzędną z tabelą nadrzędną. Nie jestem w stanie dowiedzieć się, jak można to zrobić, gdy dane dla tabeli podrzędnej przychodzi za pośrednictwem wywołania AJAX, który następnie tworzy tabelę dynamiczną.Wiersze potomków w DataTables przy użyciu AJAX

Śledzę this

Poniżej jest mój kod.

$('#myTable tbody).on('click', 'td.details-control', function() { 

     var tr = $(this).closest('tr'); 
     var row = $('#myTable').DataTable().row(tr); 

     if (row.child.isShown()) { 
      // This row is already open - close it 

      row.child.hide(); 
      tr.removeClass('shown'); 
     } 
     else { 
      // Open this row 

      row.child(format()).show(); 
      tr.addClass('shown'); 
     } 
    }); 

function format() { 

    $.ajax({ 
     type: 'GET', 
     url: '@Url.Action("MyFunction", "Home")', 
     data: { "Id": MyId }, 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      var list = data; 
      $.each(list, function (index, item) { 

       return '<table>.......<table />'; 

       //i need to loop across the list and create a dynamic table with tr and td 


      }); 
     }, 
     error: function (result) { 
      var error = JSON.stringify(result); 
      throw "Error..."; 
     } 
    }); 
} 
+0

Czy próbowali po prostu dodanie tych nowych wierszy do istniejącej tabeli? – krillgar

+0

Dodałem trochę statycznych danych, żeby zacząć i wszystko działało dobrze. Jednak pobierają dane z bazy danych i trzeba użyć wywołania AJAX. Nie mogę sformatować 'tabeli dynamicznej' używając elementów na liście. – user2281858

+0

Zamiast zwracania wierszy do drugiej funkcji, dodawałbym je bezpośrednio do tabeli. – krillgar

Odpowiedz

5
$('#myTable tbody').on('click', 'td.details-control', function() { 

    var tr = $(this).closest('tr'); 
    var row = $('#myTable').DataTable().row(tr); 

    if (row.child.isShown()) { 
     // This row is already open - close it 

     row.child.hide(); 
     tr.removeClass('shown'); 
    } 
    else { 
     format(row.child); // create new if not exist 
     tr.addClass('shown'); 
    } 
}); 

a następnie format() będzie

function format(callback) { 
    $.ajax({ 
     .... 
     //async: false, you can use async 
     success: function (data) { 
      var list = data; 
      var html = ''; 
      $.each(list, function (index, item) { 
       ... 
       //create <tr> <td> with loop 
       html= '<tr><td>.......</tr>'; 
      }); 
      callback($('<table>' + html + '</table>')).show(); 
     }, 
     ... 
    }); 
} 

demo tutaj jsfiddle

+0

żadnych skrzypiec dla odniesienia ...? lub dowolny link, który może być przykładem tego ...? – user2281858

+1

dodano skrzypce, aby odpowiedzieć na – Jag

+0

@JAG zobaczył ur jsfiddle. Chcę dołączyć część css do html. Jak to zrobić? (m nowy w sieci). życzliwie odpowiedz. – NightFurry

Powiązane problemy