2017-10-04 63 views
0

正如標題所示,我想知道如何從外部訪問功能。可以通過使用'this.FunctionName'在ready()中完成它。但顯然,'this'是Firebase偵聽器中的'null'值。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

回答

0

最簡單的方法是使this一個別名,並用它的火力監聽器裏。

例子:

ready() { 
    super.ready(); 

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

另一種方法是使用JavaScript bind method,它允許您爲this指定的值。

例子:

ready() { 
    super.ready(); 

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

謝謝!但是有沒有更合乎邏輯的做法呢? – jaronnan