Свернуть все дочерние строки по умолчанию в DataTables - PullRequest
1 голос
/ 23 марта 2019

Я получаю данные из контроллера codeigniter и отображаю их с использованием данных. Я хочу показать другие детали в дочернем ряду. Я могу открывать и закрывать по нажатию на кнопку, чтобы свернуть все дочерние строки, чтобы она выглядела как аккордеон. Поэтому моя проблема в том, что я хочу свернуть все дочерние строки по умолчанию, но все еще могу закрыть его кнопкой. Я прочитал много решений, но все еще не работает. Вот мой код

 function format ( d ) {
    // `d` is the original data object for the row
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
        '<tr>'+
            '<td>Add Ons</td>'+
            '<td>Remarks</td>'+
        '</tr>'+
        '<tr>'+
            '<td>---</td>'+
            '<td>'+d.remarks+'</td>'+
        '</tr>'+
    '</table>';
}

$(document).ready(function() {
    var table = $('#mydata').DataTable( {
             ajax: {
                 url: "/chef/get_orderlist",
                 dataSrc: ''
             },
            colReorder: {
            realtime: true
            },
            "aoColumns" : [
                {
                "className":      'details-control',
                "data":           null,
                "defaultContent": ''
                },
                {data : 'order_id'},
                {data : 'cust_name'},
                {data : 'table_code'},
                {data : 'menu_name'},
                {data : 'order_qty'},
                {
                    data: null,
                    render: function ( data, type, row, meta) {
                        return '<button id="status" class="status btn dt-buttons '+ data.item_status +
                        '" data-order_item_id="'+ data.order_item_id +'"'+
                        ' data-item_status="'+ data.item_status +'" onclick="change_status()">'+ data.item_status +'</button>';
                        }
                    }
                ]
            });

// FOR OPENING AND CLOSING THE ACCORDION
        $('#mydata 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
                    row.child.hide();
                    tr.removeClass('shown');
                }
                else {
                    // Open this row
                    row.child( format(row.data()) ).show();
                    tr.addClass('shown');
                }
            } );

// THIS IS THE PART WHERE THE CHILD ROWS SHOULD BE OPENED AS "DEFAULT" 
         $("#mydata").DataTable().rows().every( function () {
                var tr = $(this.node());
                this.child(format(tr.data('child-value'))).show();
                tr.addClass('shown');
            });


} );

1 Ответ

0 голосов
/ 23 марта 2019

Вы скопировали этот ответ , который был адаптирован для этого конкретного вопроса.

В вашем случае правильный код будет:

$('#mydata').on('init.dt', function(e, settings){
   var api = new $.fn.dataTable.Api( settings );
   api.rows().every( function () {
      var tr = $(this.node());
      this.child(format(this.data())).show();
      tr.addClass('shown');
   });
});

var table = $('#mydata').DataTable( {
   // ... skipped ...
});

См. jQuery DataTables: jQuery DataTables: как развернуть / свернуть все дочерние строки для получения дополнительных примеров и информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...