我有一个表,它使用自定义服务器端初始化参数来获取其数据服务器端,这些参数根据生成的报告而变化。生成表格后,用户可以打开一个弹出窗口,在其中可以添加多个要搜索的其他过滤器。我需要能够使用与原始表相同的初始化参数,并使用fnServerParams添加新的参数。
我无法弄清楚如何使用datatables API获取原始初始化参数。我以为我可以获得对象的引用,使用fnSettings获取设置,并将这些设置传递到新的数据表实例,如下所示:
var oSettings = $('#myTable').dataTable().fnSettings();
// add additional params to the oSettings object
$('#myTable').dataTable(oSettings);
但是通过fnSettings返回的变量不是我需要的,也不起作用。
此时,似乎我将重新构建事物,以便我可以将初始化参数作为变量传递并根据需要添加参数,除非有人可以引导我朝正确的方向发展。
编辑: 按照下面的tduchateau的回答,我可以使用
在那里中途var oTable= $('#myTable').dataTable(),
oSettings = oTable.fnSettings(),
oParams = oTable.oApi._fnAjaxParameters(oSettings);
oParams.push('name':'my-new-filter', 'value':'my-new-filter-value');
并且可以确认我的新服务器端参数已添加到现有的参数上。
然而,我仍然不在那里。
$('#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;
在设置
时丢失所有自定义参数oTable.bDestroy = true;
返回上述错误。只需致电
oTable.fnDraw();
导致使用原始设置重绘表格。
答案 0 :(得分: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 :(得分: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插件中看到一些示例用法。
但我不确定这是你需要的......: - )