Не удается получить доступ к экземпляру DataTables - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть DataTable, который я инициализирую при загрузке страницы.Все работает как положено.

$(document).ready(function () {

    var dtTable = $('#table_pins').DataTable({
        "order": [],
        "columnDefs": [
          { className: "dt-nowrap", "targets": [4] },
          { "targets": [1, 2], "visible": false, "searchable": false }
        ],
        "bFilter": true,
        rowReorder: {
            selector: 'td:nth-child(2)'
        },
        responsive: true
    });

    dtTable.on('search.dt', function(){
      reloadMarkers();
    });

});

В поисковом событии мне нужно снова пройтись по строкам и обновить контакты карты, чтобы получить доступ к экземпляру DataTables.Я попытался:

function reloadMarkers() {
    $('#table_pins').DataTable().rows().iterator('row', function(context, index){
        var data = $(this.row(index).data());
    });
}

Но я получаю эту ошибку:

DataTables warning: table id=table_pins - Cannot reinitialise 
DataTable. For more information about this error, please see 
http://datatables.net/tn/3

Я просмотрел документы и добавил "retrieve": true при инициализации, но все равно получаю ошибку.Почему он не получает экземпляр, так как он уже инициализирован?

1 Ответ

0 голосов
/ 14 февраля 2019

Ваша первоначальная ошибка

Предупреждение DataTables: table id = table_pins - Невозможно повторно инициализировать DataTable.Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/3

. Это вызвано вашей попыткой вызвать конструктор DataTable для того же элемента DOM (как сказано в комментариях) вместо доступа к уже существующему DataTable.экземпляр

    $('#table_pins').DataTable().rows().iterator('row', function(context, index){

Ваши undefined ошибки, скорее всего, связаны с областью видимости - возможно, ваше определение reloadMarkers() находится за пределами $(document).ready() обратного вызова (не могу сказать навернякабез более широкого примера кода.

Не совсем понятно, чего вы пытаетесь достичь с помощью reloadMarkers().

. Я бы порекомендовал изменить reloadMarkers() на что-то вроде: * 1022.*

function reloadMarkers() {
    dtTable.rows({search:'applied'}).every(function(){
        //do what you wanted to do with your row data, index, 
        //using this.data(), this.index() methods
    });
}

с учетом того, что он должен быть помещен внутри $(document).ready().

Или, если событие лучше, если вы не вызываете эту функцию в других случаях, кроме поиска по таблице, вы можете сделатьупростите код и поместите тело функции внутри search обратного вызова события.

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