2016-03-12 4 views
-1

Я просто хотел вызвать функцию внутри самопроизвольной анонимной функции. Всякий раз, когда я пытаюсь вызвать функцию, я получаю сообщение об ошибке сказав «Uncaught TypeError: createGesture() не является функцией»как вызвать функцию внутри самопроизвольной анонимной функции?

loadGesturesFromDatabase: function() { 
    var firebaseRef = new Firebase("https://test.firebaseio.com/"); 

    this.loadFromFireBase(firebaseRef); 

    firebaseRef.on('value', function(dataSnapshot) { 

    dataSnapshot.val(); 

    console.log(dataSnapshot.val()); // console showing the data       //which fetched from firebase 


    //Only having issue when executing following line of code 

    this.loadJson(JSON.stringify(dataSnapshot.val())); 

    }); 

} 

loadJson: function(json) { 

} 
+0

Пожалуйста показать полный след ошибки. это внутри обратного вызова должно относиться к firebaseRef, у которого не было бы load loadJson. –

+0

вы вызываете где-то в своем коде неопределенную функцию 'createGesture'. Найдите файлы для этого и прокомментируйте его. – Oden

+0

Возможно, «это» не то, что вы ожидаете. Прочитайте [это] (http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – trincot

ответ

2

Предоставленный код не так много, чтобы пройти, но ошибка, вероятно, вызвана тот факт, что вы ссылаетесь на this внутри анонимной функции.

this.loadJson(JSON.stringify(dataSnapshot.val()));

Попробуйте хранить this из анонимной функции, а затем использовать его в анонимной функции, как так

loadGesturesFromDatabase: function() { 
    var firebaseRef = new Firebase("https://test.firebaseio.com/"); 

    //We keep a reference to the correct this 
    var _this = this; 

    this.loadFromFireBase(firebaseRef); 

    firebaseRef.on('value', function(dataSnapshot) { 
     dataSnapshot.val(); 
     console.log(dataSnapshot.val()); // console showing the data       //which fetched from firebase 

     //You are now referencing the correct this 
     _this.loadJson(JSON.stringify(dataSnapshot.val())); 
    }); 
} 

В качестве примечания, нет самостоятельных вызывающих функций в коде вы предоставили. Функция самостоятельных ссылающаяся выглядит следующим образом

(function() { 
    //code 
})() 
+0

Большое спасибо. это сработало. :) –

+0

Рад, что смогу помочь –

1

Митч определил проблему: поскольку у вас есть функция обратного вызова, смысл this изменений. Вы можете явно задать значение this с помощью bind():

firebaseRef.on('value', function(dataSnapshot) { 
    this.loadJson(JSON.stringify(dataSnapshot.val())); 
}.bind(this)); 

См: Use of the JavaScript 'bind' method

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