Firebase JSON结构未插入widget功能

时间:2017-01-17 19:45:28

标签: javascript json firebase firebase-realtime-database

我知道这可能是一个常见的问题,但是我遇到了使用我的用例获得任何解决方案的问题。我有一个日历小部件,我已经使用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

1 个答案:

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

并从代码底部删除初始化,因为它已插入回调中