2017-10-04 60 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