【发布时间】:2019-02-19 08:10:04
【问题描述】:
我有以下datatables 初始化,其中我使用preDrawCallback 函数根据表中的记录数隐藏和显示分页和过滤器。
由于它是 webpack 项目的一部分,我已将其转换为 es6,但我不得不禁用该函数的对象简写,因为我无法在不使用 this 的情况下找到获取当前表的方法:
$tables.DataTable({
preDrawCallback: function(settings) { // eslint-disable-line object-shorthand
const $table = $(this); // is there a way to get this table without using this?
// rest of code
}
})
查看了大量文档后,似乎没有将参数传递给我可以获取该表的函数,并且所有示例都使用 $(this)。
我的问题是我必须使用它还是有其他方法可以获取表格以便我可以将命名函数更改为箭头函数?
更新
似乎我看错了问题,毕竟不需要使用箭头函数,修复 lint 错误解决了不使用 this 的需要(请参阅下面的答案),但以防万一有人不使用不想使用this,在控制台记录了很多不同的东西后,我发现当前表ID保存在传入的设置中,所以你可以这样做
$(`#${settings.sTableId}`).DataTable();
【问题讨论】:
-
但是您可以轻松地使用箭头函数并获取表实例。需要
this的唯一原因是使用api,即this.api()等于$(settings.oInstance.init().selector).DataTable()... -
啊,对了,我使用了 api:
new $.fn.dataTable.Api(settings);,但看不到任何从该 api 获取表格的方法——这让我感到困惑,因为 api 有一个.table()——没有意识到设置实际上也在当前表上保存了大量信息 -
preDrawCallback:(settings) => { const $table = $(settings.oInstance.init().selector).DataTable() } -
啊是的,只有在有一张桌子的情况下才有效 - 请参阅:jsfiddle.net/v48gcn9r/1
-
我的立场是正确的!应该使用
$('#'+settings.sTableId).DataTable()。
标签: javascript jquery ecmascript-6 datatables arrow-functions