3

我有一个表格,它使用自定义的服务器端初始化参数获取其服务器端的数据,这些参数根据生成的报告而有所不同。生成表格后,用户可以打开一个弹出窗口,他们可以在其中添加多个要搜索的附加过滤器。我需要能够使用与原始表相同的初始化参数,并使用 fnServerParams 添加新参数。

我不知道如何使用数据表 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();

导致表格使用其原始设置重新绘制。

4

2 回答 2

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]} );
        }
    }
于 2014-03-06T14:38:34.620 回答
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插件中看到一些示例用法。

但我不确定这是你需要的...... :-)

于 2013-08-18T22:23:54.083 回答