开发者问题收集

在加载时将 DataTable 引用传递给回调函数

2022-03-02
958

我当前的代码是:

var CommissionLogs = $("#CommissionLogs").DataTable({       
     ajax: {
         url: ajaxurl + '?action=pos&post_action=get_commissions'
      },
    'initComplete': function (settings, json){
        //possible to access 'this'
        this.api().columns(1);
    }
  });

我在帮助下改进了上面的代码,如下所示:

var CommissionLogs = $("#CommissionLogs").DataTable({       
     ajax: {
         url: ajaxurl + '?action=pos&post_action=get_commissions'
      },
    'initComplete': function(settings, json){ 
        callbackFunction(settings);
     }
  });

 function callbackFunction(settings){
     var api = new $.fn.dataTable.Api( settings );
     // api is accessible here.
 }

更新:

现在我可以从回调函数访问 api。但我想使用与以下代码相同的带有 load() 的回调。

CommissionLogs.ajax.url( newAjaxURL ).load( callbackFunction(), true);

但设置参数在加载函数中不可访问。

我可以清除和销毁数据表并始终重新初始化。但什么才是正确的方法。

2个回答

我认为您需要 settings :

https://datatables.net/reference/type/DataTables.Settings

$('#example').dataTable( {
    "initComplete": function(settings, json) {
        myFunction(settings);
    }
});

function myFunction(settings){
    var api = new $.fn.dataTable.Api( settings );
 
    // Output the data for the visible rows to the browser's console
    // You might do something more useful with it!
    console.log( api.rows( {page:'current'} ).data() );
}

其他选项是在整个代码中重复使用 var CommissionLogs 变量而不使用 this 我强烈推荐最后一个选项

Dani
2022-03-02

dataTable.ajax.url().load() 无法访问设置。

因此无法使用设置调用回调函数。

但可以在没有设置的情况下使用回调函数。

因此这里有一种使用设置的替代方法。

 CommissionLogs.clear();// clear the table
 CommissionLogs.destroy();// destroy the table
 CommissionLogs = $("#CommissionLogs").DataTable({           
         ajax: {
            url: newAjaxUrl
         },
        'initComplete': function (settings, json){
            callbackDatatableFunciton(settings);
        }
    }); 
infomasud
2022-03-02