开发者问题收集

将回调附加到数据表:正确的语法是什么?

2017-01-23
831

我正在定制一个第三方 Web 应用程序,该应用程序使用 Datatables 通过 AJAX 加载一些数据。我想将一个回调函数附加到该函数以检测何时完成加载。

现在,我已经阅读了有关 initComplete()fnDrawCallback 的信息,但问题是:我看到的所有代码示例都是这种形式:

$('#tablename').dataTable( {
  "initComplete": function() { }

但就我而言,数据表是由 Web 应用程序创建的,而不是由我创建的,我不想弄乱它的源代码(除此之外,因为数据表是在许多页面使用的函数中创建的,我只需要在其中一个页面中附加此回调)。我能做的是在创建表后获取对表的引用:

    var tabla=$.('#tablename').DataTable();

然后... 什么?那么我该如何将回调附加到它?在这种情况下正确的语法是什么?

(如果这是一个愚蠢的问题,请原谅。我的工作中很少使用 Javascript,而且当我不得不接触它时,我的技能往往会生疏)。

2个回答

您可以监听 init 事件,该事件在 DataTables 完全初始化并加载数据时触发。

Ajax 来源的数据

如果您使用的是 Ajax 来源的数据,则可以在 DataTables 初始化 之前 之后 将处理程序附加到此事件。

var table = $('#example').DataTable({
    ajax: 'https://api.myjson.com/bins/qgcu'
});

$('#example')
    .on('init.dt', function () {
        console.log( 'Table initialisation complete: '+new Date().getTime() );
    });

有关代码和演示,请参阅 此示例

HTML 或 JavaScript 来源的数据

如果您使用的是 HTML 或 JavaScript 来源的数据,则需要在 DataTables 之前 将处理程序附加到此事件初始化。

$('#example')
    .on('init.dt', function () {
        console.log( 'Table initialisation complete: '+new Date().getTime() );
    });

var table = $('#example').DataTable();

请参阅 此示例 以获取代码和演示。

Gyrocode.com
2017-01-24

您可以尝试保存旧设置,使用新的回调扩展设置对象,然后使用这些新设置重新初始化表:

var tabla = $('#table').dataTable();

var oldOpts = tabla.fnSettings();

var newOpts = $.extend(oldOpts, {
    fnDrawCallback: function(oSettings)    {
     //Your code
    }

tabla.fnDestroy();

$('#table').dataTable(newOpts);
Sebastianb
2017-01-24