2013-08-18 12 views
3

У меня есть таблица, которая получает свои данные на стороне сервера, используя пользовательские параметры инициализации на стороне сервера, которые различаются в зависимости от того, какой отчет создается. После создания таблицы пользователь может открыть всплывающее окно, в котором они могут добавить несколько дополнительных фильтров для поиска. Мне нужно иметь возможность использовать те же параметры инициализации, что и исходная таблица, и добавлять новые, используя fnServerParams.Datatables: как перезагрузить данные на стороне сервера с дополнительными параметрами

Я не могу понять, как получить исходные параметры инициализации, используя API-интерфейсы datatables. Я думал, что я мог бы получить ссылку на объект, получить настройки с помощью fnSettings, и передать эти параметры в новый экземпляр DataTables так:

var oSettings = $('#myTable').dataTable().fnSettings(); 
// add additional params to the oSettings object 
$('#myTable').dataTable(oSettings); 

но переменная возвращаемый через fnSettings не то, что мне нужно, и не работает.

На данный момент кажется, что я собираюсь перепроектировать вещи так, чтобы я мог передавать параметры инициализации вокруг как переменную и добавлять параметры по мере необходимости, если только кто-то не может направить меня в правильном направлении.

EDIT: После ответа tduchateau в поле ниже, я смог частично там с помощью

var oTable= $('#myTable').dataTable(), 
    oSettings = oTable.fnSettings(), 
    oParams = oTable.oApi._fnAjaxParameters(oSettings); 
oParams.push('name':'my-new-filter', 'value':'my-new-filter-value'); 

и могу подтвердить, что моя новая ServerSide PARAMS добавляется к существующим Params.

Однако я все еще не совсем там.

$('#myTable').dataTable(oSettings); 

выдает ошибку:

DataTables warning(table id = 'myTable'): Cannot reinitialise DataTable. 
To retrieve the DataTables object for this table, please pass either no arguments 
to the dataTable() function, or set bRetrieve to true. 
Alternatively, to destroy the old table and create a new one, set bDestroy to true. 

Установка

oTable.bRetrieve = true; 

не избавиться от ошибки, и настройки

oSettings.bRetrieve = true; 

приводит таблицу не выполняющее вызов ajax. Установка

oSettings.bDestroy = true; 

теряет все пользовательские Params, при установке

oTable.bDestroy = true; 

возвращает вышеуказанную ошибку. И просто позвонить

oTable.fnDraw(); 

вызывает перерисовку таблицы с ее исходными настройками.

+0

Вы когда-нибудь это выясняли? Я столкнулся с подобной проблемой. – Voodoo

+0

@ Voodoo, см. Мой ответ ниже – earachefl

ответ

3

Наконец получил его на работу, используя fnServerParams. Обратите внимание, что я удаляю ненужные параметры и добавляю новые, используя объект url var:

"fnServerParams": function (aoData) { 
     var l = aoData.length; 

     // remove unneeded server params 
     for (var i = 0; i < l; ++i) { 

      // if param name starts with bRegex_, sSearch_, mDataProp_, bSearchable_, or bSortable_, remove it from the array 
      if (aoData[i].name.search(/bRegex_|sSearch_|mDataProp_|bSearchable_|bSortable_/) !== -1){    
       aoData.splice(i, 1); 

       // since we've removed an element from the array, we need to decrement both the index and the length vars 
       --i; 
       --l; 
      }    
     } 

     // add the url variables to the server array  
     for (i in oUrlvars) { 
      aoData.push({ "name": i, "value": oUrlvars[i]}); 
     } 
    } 
1

Обычно это правильный путь для получения параметров инициализации:

var oSettings = oTable.fnSettings(); 

Почему это не то, что вам нужно? Что не так с этими параметрами?

Если вам нужно фильтровать данные в зависимости от ваших дополнительных фильтров, вы можете заполнить массив «данных AJAX», посланных на сервер с помощью этого:

var oTable = $('#myTable').dataTable(); 
var oParams = oTable.oApi._fnAjaxParameters(oTable); 
oParams.push({name: "your-additional-param-name", value: your-additional-param-value }); 

Вы можете увидеть некоторые примеры использований в TableTools плагин ,

Но я не уверен, что это то, что вам нужно ... :-)

+0

спасибо за помощь. См. Мое редактирование выше. – earachefl

Смежные вопросы