首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合物this.push不工作

聚合物this.push不工作
EN

Stack Overflow用户
提问于 2016-09-03 12:15:57
回答 2查看 1.1K关注 0票数 1

在Polymer1.x中,我试图将数据从我的数据库推送到数组中,但是由于任何原因,它突然停止工作。

运行此代码时

代码语言:javascript
复制
ready: function(){
    var leserbriefRef = firebase.database().ref('leserbriefe');
        leserbriefRef.on('value', function(snap) {
          var n = snap.child('numLeserbriefe').val();
          console.log(n);
          this.lbriefe = [];
          for(var i=0; i<n; i++){
                this.push("lbriefe", snap.child('l'+(n - 1 - i)).val());
            }
        });
  }

我得到以下错误消息: firebase.js:283 Uncaught : this.push不是一个函数

我也不知道原因。本周早些时候,它仍然有效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-03 14:47:32

这是js初学者中常见的问题,主要是this关键字的使用。匿名函数中的this变量的上下文不是您想要的上下文(在本例中是元素)。要解决这个问题,可以使用closures1、.bind2或更新的ES2015箭头functions3。

闭包

代码语言:javascript
复制
ready: function() {
  // assign this to self
  var self = this;

  var leserbriefRef = firebase.database().ref('leserbriefe');
  leserbriefRef.on('value', function(snap) {
    var n = snap.child('numLeserbriefe').val();
    console.log(n);
    self.lbriefe = [];
    for(var i = 0; i < n; i++){
      self.push("lbriefe", snap.child('l'+(n - 1 - i)).val());
    }
  });
}

.bind

代码语言:javascript
复制
ready: function() {
  var leserbriefRef = firebase.database().ref('leserbriefe');
  leserbriefRef.on('value', function(snap) {
    var n = snap.child('numLeserbriefe').val();
    console.log(n);
    this.lbriefe = [];
    for(var i = 0; i < n; i++){
      this.push("lbriefe", snap.child('l'+(n - 1 - i)).val());
    }
  }.bind(this)); // bind this keyword to element's
}

ES2015箭头函数(最好是完全ES2015)

代码语言:javascript
复制
ready() {
  const leserbriefRef = firebase.database().ref('leserbriefe');
  leserbriefRef.on('value', (snap) => { // arrow functions!
    const n = snap.child('numLeserbriefe').val();
    console.log(n);
    this.lbriefe = [];
    for(let i = 0; i < n; i++){
      this.push("lbriefe", snap.child(`l${n - 1 - i}`).val());
    }
  });
}

来源:

1

2

3

票数 5
EN

Stack Overflow用户

发布于 2016-09-03 15:06:25

您必须注意this绑定,因为this的作用域是函数内部的更改。

代码语言:javascript
复制
ready: function(){
    var leserbriefRef = firebase.database().ref('leserbriefe');
        leserbriefRef.on('value', function(snap) {
          var n = snap.child('numLeserbriefe').val();
          console.log(n);
          this.lbriefe = [];
          for(var i=0; i<n; i++){
                this.push("lbriefe", snap.child('l'+(n - 1 - i)).val());
            }
        }.bind(this));
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39306772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档