Javascript 根据新事件使用Firebase更新FullCalendar

Javascript 根据新事件使用Firebase更新FullCalendar,javascript,jquery,firebase,firebase-realtime-database,fullcalendar,Javascript,Jquery,Firebase,Firebase Realtime Database,Fullcalendar,我正在尝试构建一个带有完整日历和Firebase的日程表应用程序。但我无法获取日历上的更改(添加/删除/移动的事件)更新。这些变化会立即反映在Firebase中 我在calendarinit'ing(从Firebase加载时)之后分配数据。我尝试将数据数组分配为addEventSource和事件属性。似乎eventSource比指定为events属性更有效。但它不会在数据更改时更新 唯一有效的方法是手动渲染或删除日历中的事件。但我想要实时更新 以下是我的一些代码: // index.js exp

我正在尝试构建一个带有完整日历和Firebase的日程表应用程序。但我无法获取日历上的更改(添加/删除/移动的事件)更新。这些变化会立即反映在Firebase中

我在calendar
init
'ing(从Firebase加载时)之后分配数据。我尝试将数据数组分配为
addEventSource
事件
属性。似乎
eventSource
比指定为
events
属性更有效。但它不会在数据更改时更新

唯一有效的方法是手动渲染或删除日历中的事件。但我想要实时更新

以下是我的一些代码:

// index.js
exports.getEvents = function() {
    return new Promise(function(resolve, reject) {
        firebase.getEvents()
            .then(calendar.addEventSource)
            .then(function() {
                resolve(true);
            })
            .catch(function(error) {
                console.warn(error);
                reject(error);
            });
    });
}

// firebase.js
exports.getEvents = function() {
    return new Promise(function (resolve, reject) {
        var ref = firebase.database().ref().child("bookings");
        ref.on('value', function (snap) {
            var arr = obj2arr(snap.val());
            calendar.render(arr);
            resolve(arr);
        }, function (err) {
            console.warn("firebase getBookings", err);
            reject(err);
        });
    });
}

// calendar.js
exports.render = function(events) {

    if ($calendar) {
        $calendar.fullCalendar( 'refetchEvents' );

        //$calendar.fullCalendar( 'removeEvents' );
        //$calendar.fullCalendar( {events: events} );

        //$calendar.fullCalendar( 'refetchEventSources', arr );
        //$calendar.fullCalendar( 'rerenderEvents' );

        console.log("calender rendered");
    }
};
在调查中,我发现:

事件源应该通过如下方法进行动态操作 addEventSource和removeEventSource。因此,动态设置 以下选项不适用:

  • 事件
  • 事件源
因此,我认为您需要使用一个

// firebase.js
    // (Inside 'value' callback):
    var newEventSource = {events: snap.val()};
    calendar.render(newEventSource);

// calendar.js
exports.render = function(newSource) {
    $calendar.fullCalendar('removeEventSources');
    $calendar.fullCalendar('addEventSource', newSource);        

};

你评论过的那些行是否是你尝试过的不起作用的东西?在我看来,
.fullCalendar({events:events})。完整日历(“参考事件”)应该可以。是的,注释行是我尝试过的。不幸的是,他们什么也不做。包括“refetchEvents”。。。这似乎是普遍的建议。所以我不明白为什么它在这里不起作用。最新版本中的功能是否已损坏?还是我做错了什么?它是否仅与作为数据源的“events”属性或作为数据源的“eventSource”一起工作?