2015-03-02 7 views
1

У меня есть функция для извлечения моих данных из бэкэнд. после загрузки данных я вызываю функцию, которая отправляется как 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... 

jsfiddle

ответ

1

Проблема заключается не в том, что обратный вызов не определен, он находится внутри dataReceiver где this не относится к объекту что вы ожидаете.

Поскольку вы вызова callback без контекста, this внутри dataReceiver имеет в виду window объекта так this.tableMaker не определен таким образом, ошибка.

Одним из возможных решений является использование Function.bind() передать контекст пользовательского выполнения для метода обратного вызова

getDableData(dataAssests.url, this.dataReceiver.bind(this)); 

Демо: Fiddle

+0

вы можете исправить/simplyfiy пути, что я получаю данные и вызов метод. Я нахожу получение данных, которые я использую больше кода. особенно избегая обратного вызова и вместо этого возвращайте данные? – 3gwebtrain

Смежные вопросы