在Polymer1.x中,我试图将数据从我的数据库推送到数组中,但是由于任何原因,它突然停止工作。
运行此代码时
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不是一个函数
我也不知道原因。本周早些时候,它仍然有效。
发布于 2016-09-03 14:47:32
这是js初学者中常见的问题,主要是this关键字的使用。匿名函数中的this变量的上下文不是您想要的上下文(在本例中是元素)。要解决这个问题,可以使用closures1、.bind2或更新的ES2015箭头functions3。
闭包
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
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)
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());
}
});
}来源:
发布于 2016-09-03 15:06:25
您必须注意this绑定,因为this的作用域是函数内部的更改。
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));
}https://stackoverflow.com/questions/39306772
复制相似问题