我知道这可能是一个常见的问题,但是我遇到了使用我的用例获得任何解决方案的问题。我有一个日历小部件,我已经使用JS在Codepen上分叉了。我想用我的Firebase数据库替换默认数据,但JSON结构不同并打破了日历功能。我在Firebase中的JSON如下:
{
"Events" : {
"cool event" : {
"calendar" : "Other",
"color" : "yellow",
"date" : "2017-01-13",
"eventName" : "new"
}
},
小部件接收数据的原始方法如下:
var data = [
{ eventName: 'Lunch Meeting w/ Mark', calendar: 'Work', color: 'orange', date: '2014-02-08' },]
如何格式化数据或修改函数以接受我的数据结构?请注意,Firebase不允许使用简单数组并将其存储为对象...
以下是CodePen:http://codepen.io/Auzy/pen/OWJxqO
答案 0 :(得分:1)
一种方法是将数据转换为所需格式的数组
例如
var firebase = {
"Events" : {
"cool event" : {
"calendar" : "Other",
"color" : "yellow",
"date" : "2017-01-13",
"eventName" : "new"
}
}
};
var data = [];
for(event in firebase.Events){
data.push(firebase.Events[event])
}
console.log(data)
<强>更新强>
Firebase API是异步的,因此您需要等待数据(使用.once('value').then(..)
)返回然后转换数据(您实际上不需要的数据) firebase提供了一个迭代器),然后初始化日历。
因此您需要将代码更改为
var stuff = firebase.database().ref().child("Events");
var data = [];
stuff.once('value').then(function(snapshot){
snapshot.forEach(function(event){
data.push( event.val() );
})
var calendar = new Calendar('#calendar', data);
});
(并从代码底部删除初始化,因为它已插入回调中)