Firebase Javascript一次单击即可多次删除

Firebase Javascript一次单击即可多次删除,javascript,jquery,firebase,firebase-realtime-database,Javascript,Jquery,Firebase,Firebase Realtime Database,我正在开发一个用于管理活动和教室预订的网页。对于每一项活动,我都会把时间、时间和教室安排在它将要发生的地方。我目前正在开发一个删除活动和相关预订的功能 function deleteEvent(event_key, event_date, event_classroom_key) { if (event_classroom_key != null) { var ref_prenotation = firebase.database().ref().child('preno

我正在开发一个用于管理活动和教室预订的网页。对于每一项活动,我都会把时间、时间和教室安排在它将要发生的地方。我目前正在开发一个删除活动和相关预订的功能

function deleteEvent(event_key, event_date, event_classroom_key) {
    if (event_classroom_key != null) {
        var ref_prenotation = firebase.database().ref().child('prenotation/'
        + event_date.getFullYear() + '/' 
        + (event_date.getMonth() + 1) + '/' 
        + event_date.getDate() + '/' 
        + event_classroom_key + '/');

        ref_prenotation.once('value', snap => {
            snap.forEach(childSnap => {
                childSnap.forEach(gcSnap => {
                    if (gcSnap.key == 'event_key') {
                        if (event_key == gcSnap.val()) {
                            ref_prenotation.child(childSnap.key).remove();
                        }
                    }
                });
            });
        });
    }

    var event_ref = firebase.database().ref().child('event/');
    event_ref.child(event_key).remove();

    $('#event_details').hide();
    $('#main_events_page').show();
    loadEventList();
}
如您所见,要从数据库中删除预订,我将按年、月、日和教室浏览数据库。通过这种方式,我可以获得在选定日期为教室预订的各个小时的信息

然后,我检查预订的时间是否与我要删除的事件相关,如果我要删除这些时间,请将其删除。 然后我删除事件记录本身

每个事件和相关预订的生成如下所示

$('#create_event_btn').on('click', () => {
    var today = Date.now() - (24*3600*1000);
    user = firebase.auth().currentUser;

    if (cs_selected_rows > 0 && ne_date >= today &&  eventTitle.value != "") {
        var event_prenotation = firebase.database().ref().child('event/').push({
            title : eventTitle.value,
            classroom : classroom_name,
            classroom_key : classroom_id,
            date : ne_date.getTime(),
            teacher : user.displayName,
            teacher_key : user.uid,
            starting_hour : selected_hours[0]
        });

        //create a reservation for the selected room, unless the event takes place abroad

        if (classroom_name != "Outdoor") {
            for (var i = 0; i < selected_hours.length; i++) {            
                firebase.database().ref().child('prenotation/'+year+'/'+month+'/'+day+'/'+classroom_id+'/'+selected_hours[i]+'/').set({
                event_key : event_prenotation.key,
                event : eventTitle.value,
                classroom : classroom_name
                });
            }
        }

        loadEventList();

        selected_hours = [];
        cs_selected_rows = 0;

        $('#new_event_page').hide();
        $('#main_events_page').show();
        $("#schedule_event_table_body").empty();

    } else if (ne_date < today) {
        alert('ERROR');
    }
});
$('create#event_btn')。在('click',()=>{
var today=Date.now()-(24*3600*1000);
user=firebase.auth().currentUser;
如果(cs_selected_rows>0&&ne_date>=today&&eventTitle.value!=“”){
var event_prenotation=firebase.database().ref().child('event/').push({
标题:eventTitle.value,
教室:教室名称,
教室钥匙:教室id,
日期:ne_date.getTime(),
教师:user.displayName,
教师密钥:user.uid,
开始时间:所选时间[0]
});
//为所选房间创建预订,除非活动发生在国外
if(教室名称!=“室外”){
对于(var i=0;i
问题是,当我按下与某个事件相关的“删除”按钮时,除了所选的事件外,还有几个事件被删除。 当我试图修改与某个事件相关的数据时,也会发生类似的情况,而且很多其他事件的数据也会被修改。 我注意到,这种情况主要发生在我通过网站访问数据库中的事件信息时,而不做任何更改。然后,当我试图修改或删除另一个事件时,第一个事件也会受到影响


我希望我提供了关于这个问题的有用信息。我很长时间没有使用firebase,但我认为我在系统性地做错事,因为问题经常发生在我身上。

你能更新你的问题,将你的JSON简短的代表性片段包括进来吗(作为文本,请不要截图)?你可以通过点击你网站中的“导出JSON”链接来解决这个问题。我找到了一个解决方案,但这个问题绝对与firebase无关。每次切换到不同事件的信息时,我只是将一个新的侦听器链接到同一个按钮。很抱歉给您带来不便。很高兴听到您找到了解决方案。如果你想把它作为一个答案,也许将来有人会从中受益。否则,我将投票以“临时问题”的形式结束该问题。每次我查找有关某个事件的信息时,我都会用一个按钮攻击一个侦听器,该按钮消除(或更改)了所有相关事件,而不仅仅是请求的事件。