我正在使用jQuery和Datatables plugin来绘制表格。我使用的数据来自Dropbox Datastore API。我认为这个问题更多的是关于JavaScript变量范围,而不是关于Datatables或Dropbox,所以希望有人可以提供帮助。
这是我的代码。评论描述了每一步。
$(function(){
//Authenticate dropbox
client.authenticate({interactive: false}, function(error) {
// Get aircraft data from dropbox
var aircraftData = [];
function getAircraftData(){
aircraftData.push(...);
}
getAircraftData();
//Initialize Aircraft table
var aircraftTable = $('#aircraft-table').DataTable({
data:aircraftData,
...
});
console.log(aircraftTable); //This yields a generic [object Object]
//Incoming data changes from Dropbox listener
datastore.recordsChanged.addListener(function (event) {
//Update aircraftData[]
getAircraftData();
//Refresh the datatable
aircraftTable.draw(); // -!- ERROR: undefined is not a function -!-
console.log(aircraftTable); //This also yields a generic [object Object]
});
});
});
我猜测aircraftTable
不可用,因为它在Dropbox侦听器函数内部时超出了范围。如何将其纳入范围以便可用?
更新
我调整了我的代码以显示一些额外的上下文。所有这一切都发生在另一个Dropbox功能中。通常,当您将DataTable
对象记录到控制台时,它看起来像这样:
[context: Array[1], selector: Object, tables: function, table: function, draw: function…]
该表工作正常,但以某种方式引用它不起作用。
答案 0 :(得分:1)
好的,我终于明白了。
首先,当我将内容记录到控制台时,我在前面添加了一些类似这样的描述:
console.log('Aircraft table: '+aircraftTable);
...记录了[object Object]
。但是,如果要查看对象及其属性,则无法将其与字符串连接。你必须这样做:
console.log(aircraftTable);
事实证明aircraftTable
实际上是可用的,但我使用了错误的方法。以下是获取新数据并重绘表格的正确方法:
//Refresh table
var aircraftData = getAircraftData();
aircraftTable.clear().rows.add(aircraftData).draw();
以下是rows.add()
的文档:http://datatables.net/reference/api/rows.add()
真是一种解脱。 :)