我有一个从后端获取数据的函数。一旦数据加载,我正在调用一个以callback
发送的函数。但我收到错误为undefined not a function
这是代码:
var initDataTable = function () {
var getDableData = function (url,callback) {
$.getJSON(url)
.then(function (data) {
callback(data);
});
};
return {
init : function (dataAssests) {
this.container = dataAssests.container;
this.headerNames = dataAssests.names;
getDableData(dataAssests.url, this.dataReceiver); //getting required data
},
dataReceiver : function (data) {
this.tableData = data;
this.tableMaker(); //not calling error Uncaught TypeError: undefined is not a function.
},
tableMaker : function () {
console.log(this.tableData);
}
};
};
//tabular data starts...
var dataAssests = {
container: $('.dataTable'),
url : 'https://tcs.firebaseio.com/d/DocPageDetails/d/Organizations.json',
names : ['Organization Name', 'Zip Code', 'Telephone', 'Organization TypeName' ]
};
var dataTableFrist = initDataTable().init(dataAssests);
//tabular data ends...
答案 0 :(得分:1)
问题不在于回调未定义,而是在dataReceiver
内,this
并未将对象指向您所期望的内容。
由于您在没有上下文的情况下调用callback
,this
内的dataReceiver
指的是window
对象,因此this.tableMaker
未定义,因此错误。
一种可能的解决方案是使用Function.bind()将自定义执行上下文传递给回调方法
getDableData(dataAssests.url, this.dataReceiver.bind(this));
演示:Fiddle