Dii*_*ord 1 javascript firebase polymer polymer-1.0
在Polymer 1.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());
}
});
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:firebase.js:283 Uncaught TypeError:this.push不是函数
我不知道为什么.本周早些时候,它仍然有效.
这是js初学者中常见的问题,基本上是this关键字的用法.this匿名函数内部变量的上下文不是您想要的(在本例中为元素).要解决此问题,您可以使用闭包[1],.bind[2]或更新的ES2015箭头函数[3].
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());
}
});
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
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());
}
});
}
Run Code Online (Sandbox Code Playgroud)
资料来源:
[1] https://developer.mozilla.org/en/docs/Web/JavaScript/Closures
[2] https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
[3] https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |