2017-10-04 3 views
0

Wie der Titel zeigt, würde ich gerne wissen, wie man auf eine Funktion von außen zugreifen. Es ist möglich, dies in ready() mit 'this.FunctionName' zu tun. Aber anscheinend ist "das" ein Null-Wert im Firebase-Listener.Polymer-Access-Funktionen außerhalb einer Funktion mit 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

Antwort

0

Der einfache Weg ist ein Alias ​​von this und verwenden Sie es im Inneren des Feuerbasis Zuhörer zu machen.

Beispiel:

ready() { 
    super.ready(); 

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

Der andere Weg ist Javascript zu verwenden bind method, die Ihnen erlauben, den Wert für this angeben.

Beispiel:

ready() { 
    super.ready(); 

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

Dank! Aber gibt es einen logischen Weg, es zu tun? – jaronnan