2017-10-04 2 views
0

Comme le titre l'indique, j'aimerais savoir comment accéder à une fonction depuis l'extérieur. Il est possible de le faire dans ready() en utilisant 'this.FunctionName'. Mais apparemment, 'ceci' est une valeur 'nulle' dans l'écouteur de firebase.Fonctions d'accès au polymère en dehors d'une fonction avec Polymer 2.0

ready() { 
    super.ready(); 
    //this.displayData("12","13"); 
    console.log(this); 
    var database = firebase.database(); 
    var myDataref = database.ref('sessions/1'); 
    myDataref.on('child_added', function(snapshot) { 
     var message = snapshot.val(); 
     //console.log("Left: "+message.left); 
     //console.log("Right: "+message.left); 
     console.log(this); 
     //this.displayData(message.left, message.right); 
    }); 
    } 

    displayData(leftData, rightData) { 
    var para = document.createElement("li"); 
    var t = document.createTextNode("Left: "+leftData+", Right: "+rightData); 
    para.appendChild(t); 
    console.log(para); 
    this.$.mes.appendChild(para); 
    } 

Code

Répondre

0

La manière simple est de faire un alias de this et de l'utiliser à l'intérieur de l'auditeur firebase.

Exemple:

ready() { 
    super.ready(); 

    var _this = this; 
    ... 
    myDataref.on('child_added', function(snapshot) { 
    ... 
    _this.displayData(message.left, message.right); 
    }); 
} 

L'autre façon est d'utiliser Javascript bind method, ce qui vous permet de spécifier la valeur de this.

Exemple:

ready() { 
    super.ready(); 

    ... 
    myDataref.on('child_added', function(snapshot) { 
    ... 
    this.displayData(message.left, message.right); 
    }.bind(this)); 
} 
+0

Merci! Mais y a-t-il une manière plus logique de le faire? – jaronnan