Javascript 分配给构造函数的DataTable未添加数据
我定义了一个类,如下所示:Javascript 分配给构造函数的DataTable未添加数据,javascript,jquery,datatables,Javascript,Jquery,Datatables,我定义了一个类,如下所示: (function() { 'use strict'; function UsersHelper(){ this.init(); this.usersTable = null; } UsersHelper.prototype.init = function(){ $('#userType').on('change', function(){
(function() {
'use strict';
function UsersHelper(){
this.init();
this.usersTable = null;
}
UsersHelper.prototype.init = function(){
$('#userType').on('change', function(){
let newData = [{ 'name': 'foo' }];
this.usersTable.row.add(newData);
}.bind(this));
this.initUserTable();
};
UsersHelper.prototype.initUserTable = function(){
this.usersTable = $('#my-dataTable').DataTable({
columns: [{
data: 'name'
}],
destroy: true,
});
$('#userType').trigger('change');
};
});
本质上,我已经在类的构造函数中声明了字段usersTable
,它实际上包含DataTable
实例,然后init
方法创建DataTable
并保存实例
初始化完成后,我在userType
上触发change事件,该事件应将newData
行添加到类中存储的usersTable
问题是没有添加数据。我看到,如果我在UsersHelper
之外声明变量usersTable
,那么不使用这个.usersTable
都可以正常工作
我做错了什么?根据
当jQuery调用处理程序时,this关键字是对
事件交付的要素;对于直接绑定事件
这是附加事件和委派事件的元素
事件这是一个元素匹配选择器。(请注意,这可能不正确。)
如果事件已从子体冒泡,则等于event.target
元素)从元素创建jQuery对象,以便
与jQuery方法一起使用时,使用$(this)
您的问题是由错误的范围引起的。在
处理程序jQuery上的内部,将此
绑定到导致当前事件的当前DOM元素。因此,您必须保存类的this
本地范围,然后在处理程序的内部使用它,而不是this
UsersHelper.prototype.init = function(){
var that = this; // note this change
this.initUserTable();
$('#userType').on('change', function(){
let newData = [{ 'name': 'foo' }];
that.usersTable.row.add(newData); // use class context
});
};
根据
当jQuery调用处理程序时,this关键字是对
事件交付的要素;对于直接绑定事件
这是附加事件和委派事件的元素
事件这是一个元素匹配选择器。(请注意,这可能不正确。)
如果事件已从子体冒泡,则等于event.target
元素)从元素创建jQuery对象,以便
与jQuery方法一起使用时,使用$(this)
您的问题是由错误的范围引起的。在
处理程序jQuery上的内部,将此
绑定到导致当前事件的当前DOM元素。因此,您必须保存类的this
本地范围,然后在处理程序的内部使用它,而不是this
UsersHelper.prototype.init = function(){
var that = this; // note this change
this.initUserTable();
$('#userType').on('change', function(){
let newData = [{ 'name': 'foo' }];
that.usersTable.row.add(newData); // use class context
});
};
这不起作用,我尝试了您的解决方案,但正如您从我的代码中看到的那样,我将此
绑定到事件处理程序。这很奇怪,因为如果我声明了没有这个的表,那么现在你有没有试着调试That.usersTable
?是的,奇怪的是实例实际上是定义的,所以我在这方面没有问题,只是数据没有被添加。你能在JSFIDLE中重新创建这个问题吗?嗯,最后我解决了它。添加数据后,您忘记使用方法。根据的官方文档:请注意,为了查看表中的新行,必须调用draw()方法,这可以通过DataTables API使用的链接轻松完成。这不起作用,我尝试了您的解决方案,但从我的代码中可以看出,我将this
绑定到事件处理程序。这很奇怪,因为如果我声明了没有这个的表,那么现在你有没有试着调试That.usersTable
?是的,奇怪的是实例实际上是定义的,所以我在这方面没有问题,只是数据没有被添加。你能在JSFIDLE中重新创建这个问题吗?嗯,最后我解决了它。添加数据后,您忘记使用方法。根据的官方文档:请注意,为了查看表中的新行,必须调用draw()方法,这可以通过DataTables API使用的链接轻松完成。