Polymer 2.0 的函数外的 Polymer 访问函数

Polymer access functions outside a function with Polymer 2.0

如标题所示,我想知道如何从外部访问函数。可以使用 'this.FunctionName' 在 ready() 中执行此操作。但显然,'this' 是 firebase 侦听器中的 'null' 值。

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

简单的方法是为 this 创建一个别名并在 firebase 侦听器中使用它。

示例:

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));
}