2017-01-17 20 views
1

我知道這可能是一個常見問題,但我遇到任何解決方案以處理我的用例時遇到問題。我有一個日曆小部件,我使用JS在Codepen上創建了一個日曆小部件。我想用我的Firebase數據庫替換默認數據,但JSON結構不同並打破日曆功能。我在火力地堡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' },] 

如何設置格式或者我的數據或修改函數接受我的數據結構?請記住,火力地堡不允許一個簡單的數組並將它們存儲爲對象...

這裏是一個CodePen:http://codepen.io/Auzy/pen/OWJxqO

回答

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)


更新

火力地堡API是異步的,所以你需要(使用.once('value').then(..))返回到等待數據,然後轉換數據(你其實並不需要,因爲火力提供了一個iterator),然後初始化日曆。

所以,你需要更改您的代碼

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

+0

@JediCoder更新的答案與解決方案(和從代碼的底部移除初始化,因爲它已經在回調被插入) (*已經在codepen上進行過測試*) –