2016-05-17 4 views
0

私のReact-nativeアプリ私のlistenForItems関数内で別の関数を呼び出そうとしていますが、エラーが発生し続けますthis.populateArray is not a function. In 'this.populateArray(solutions)', this.populateArray is undefined.私は他のクラスでこれを行いますが、動作していますが何らかの理由でここでは機能しません。私が行方不明のものはありますか?別の関数内のネイティブの問題を呼び出す関数に反応しますか?

populateArray: function(solutions) { 
    var completed = []; 
    var inProgress; 

    for (var i = 0; i < solutions.length; i++) { 
     if (solutions[i].completed == 0) { 
      inProgress = solutions[i].id; 
     } 
     else { 
      completed.push(solutions[i].id); 
     } 
    } 
}, 

listenForItems: function(cluesRef) { 

    var solutions = []; 
    userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){ 
     var solution = snap.val(); 
     for (var i = 0; i < solution.length; i++) { 
      if (solution[0].hunt_id == 0) { 
       solutions.push(solution[0]); 
      } 
     } 
     this.populateArray(solutions); 
    }); 
}, 

答えて

3

古典的なこの範囲の問題はjavascriptです。 Googleがより理解しやすくなります。要するに、関数内の単語 "this"はその関数を参照します。この例では、userSolutionsRef.orderByChildで使用する無名関数(コールバック)を参照しています。これを解決する方法はたくさんあります。あなたはそれが

userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => { 
    var solution = snap.val(); 
    for (var i = 0; i < solution.length; i++) { 
     if (solution[0].hunt_id == 0) { 
      solutions.push(solution[0]); 
     } 
    } 
    this.populateArray(solutions); 
}); 

またはES5ソリューション

var that = this; 
userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){ 
     var solution = snap.val(); 
     for (var i = 0; i < solution.length; i++) { 
      if (solution[0].hunt_id == 0) { 
       solutions.push(solution[0]); 
      } 
     } 
     that.populateArray(solutions); 
    }); 
のようなものとなった場合にはES6(ES2015)矢印の機能を使用することができます
関連する問題