DataTables получают доступ к столбцу по имени или возвращают дополнительные данные с сервера. - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь сделать свою функцию DataTables общей, чтобы она работала для любой таблицы на моем веб-сайте.

Я хочу покрасить фон моих строк в зависимости от столбца «status», который будет присутствоватьво всех моих таблицах.Единственный способ, которым я могу окрашивать строки в данный момент, - это доступ к массиву данных по индексу.Мне нужен способ доступа к столбцу по имени, а не по индексу массива.

Приведенный ниже код работает, добавляя либо класс «зеленый», либо «красный» в зависимости от значения в aData[6], но есть ли способВместо этого я могу искать значение в aData['status']?

php в 'https://www.example.com/table-data' возвращает массив:

return array('data' => array(...., ..., ....));

jQuery для инициализации DataTables:

$('.ajax-data-table').each(function(index) {
    var table = this.id;
    // Create ajax table with datatables
    $(this).dataTable({
        processing: true,
        ajax: {
            url: 'https://www.example.com/table-data',
            data: function (d) {
                d.table = table;
            }
        },
        deferRender: true,
        responsive: true,
        columnDefs: [
            {targets: ['no-sort'], bSortable: false},
            {targets: ['no-visible'], className: 'never'}
        ],
        fnRowCallback: function(nRow, aData, iDisplayIndex) {
            if (aData[6] == "W") $(nRow).addClass('working');
            else if (aData[6] == "C") $(nRow).addClass('closed');
            return nRow;
        }
    });
});

Другая возможность может состоять в том, чтобы передать некоторые дополнительные данные обратно с сервера, чтобы я мог сообщить функции fnRowCallback, в каком столбце искать статус.

Если я передам обратно массив с сервера, например return array('data' => array(...., ..., ....), 'extra' => 6); как мне получить доступ к «дополнительным» данным в fnRowCallback?

Update

Мне удалось подтвердить, что я могу передать дополнительные данные с сервера, как показано выше, что я вижу при работе с fnInitComplete:

fnInitComplete: function(oSettings, json) {
      console.log(json.extra);
}

Можно ли получить доступ к данным json.extra в fnRowCallback?Если есть способ, я могу использовать aData[json.extra]?

1 Ответ

0 голосов
/ 22 мая 2018

В итоге я нашел немного хакерского обходного пути для достижения этой цели.

Итак, для всех, кто ищет подобное решение .....

  1. Создал скрытый столбецв вашей таблице
  2. Передайте обратно ассоциативный массив с ключом 'class' для скрытого столбца: Например, array('class' => 'myClass');
  3. Добавьте следующее в свой JavaScript-код для поиска данных, чтобы найти любойстолбец, который имеет ассоциативный массив с именем ключа 'class' и добавляет значение в класс строки таблицы:

    fnRowCallback: function (nRow, aData, iDisplayIndex) {var className = $ .map (aData,function (elem, index) {if (elem && elem.class) return elem.class;});// Добавить класс в строку if (className.length> 0) $ (nRow) .addClass (className.join (''));return nRow;}

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