DataTables,ES6箭头功能以及此

时间:2018-09-14 13:39:18

标签: javascript jquery ecmascript-6 datatables arrow-functions

我有以下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)

我的问题是我是否必须使用此函数,或者是否有其他获取表的方法,以便可以将命名函数更改为箭头函数?

更新

似乎我在看错问题,并且根本不需要使用箭头功能并修复了棉绒错误,从而解决了无需使用this的需要(请参见下面的答案),但以防万一有人不想使用this,经过大量控制台记录后,我发现当前表ID保留在传入的设置中,因此您可以

$(`#${settings.sTableId}`).DataTable();

1 个答案:

答案 0 :(得分:2)

如您所说,如果未将值作为参数传递,则需要使用普通函数。普通功能和箭头功能对于this具有不同的行为,因此您需要为作业选择合适的工具。

对于您看到的皮棉错误,它与箭头功能无关。只是告诉你这样写:

$tables.DataTable({
  preDrawCallback(settings) { // <-- using shorthand on this line
    const $table = $(this); 

    // rest of code
  }
});