【问题标题】:Firebase JSON structure not plugging into widget functionFirebase JSON 结构未插入小部件功能
【发布时间】:2017-01-17 19:45:28
【问题描述】:

我知道这可能是一个常见问题,但我在获取任何解决方案以适用于我的用例时遇到了问题。我有一个使用 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

【问题讨论】:

    标签: javascript json firebase firebase-realtime-database


    【解决方案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);
    });
    

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

    【讨论】:

    • @JediCoder 用解决方案更新了答案(已在 codepen 上测试
    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多