javascript richiamo per clic del mese, della settimana, del giorno della barra del titolo?



html javascript-events (2)

Devo eseguire un codice javascript per ricaricare il calendario quando l'utente fa clic sui pulsanti giorno / settimana / mese. C'è qualche callback come dayButtonClicked () o qualcosa del genere?

BUG in corso:

quando carico il calendario per la prima volta La vista iniziale sembra buona la mia inizialmente carica giorno. Non appena carico un'altra vista come la settimana. Ogni singola voce è duplicata e mostra entrambe le fonti di dati. Se poi clicco avanti e indietro tra il giorno e il mese, i dati torneranno alla normalità. Quello che sta accadendo è che removeEventSource non viene chiamato quando prima carica la nuova vista dopo aver cliccato di giorno in settimana. hai visto questo accadere prima?

<script type='text/javascript'>

    $(document).ready(function() {

        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var loadUrl = "menu_booking.php?ne=1&calsub=1";
        var lastView;
        var fullSource = "../fullcalendar/json-events.php?idc=<?= $sClient ?>&v=long";
        var liteSource = "../fullcalendar/json-events.php?idc=<?= $sClient ?>";

        $('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay'
            },
            columnFormat: {
                month: 'ddd',
                week: 'ddd d/M',
                day: 'dddd d/M'
            },          
            defaultView: 'agendaDay',           
            firstDay: 1,            
            //editable: true,
            selectable: true,
            allDaySlot: false,
            firstHour: 7,




            viewDisplay: function(view) {
                if (lastView == undefined) { lastView = 'firstRun';  }

                if (view.name != lastView ) {

                if (view.name == 'agendaWeek') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', fullSource ); 
                }
                if (view.name == 'agendaDay') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', liteSource ); 
                }

                if (view.name == 'month') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', fullSource ); 
                }
                lastView = view.name;
                }
            },

            timeFormat: { // for event elements
                agendaDay: '',
                agendaWeek: '',
                month: '',
                '': 'h(:mm)t' // default
            },          

        });
        //$('#calendar').limitEvents(2);
    });

</script>

Ho persino copiato il tuo codice esattamente come lo fai perché ho pensato che ci fosse un problema con il mio codice. anche se cambio a questo:

        //VIEW CHANGE - ALSO ADDS INITIAL SOURCES PER DAY VIEW
        viewDisplay: function(view) {
                $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                $('#calendar').fullCalendar( 'addEventSource', fullSource );                }
        },

Raddoppia ancora i dati quando mi trasferisco dalla vista caricata predefinita a un'altra. Sto iniziando a pensare che sia sicuramente un bug in FullCalendar. Mi sta facendo impazzire

EDIT 2: MIO DIO. Non posso credere che alla fine funzioni!

Non ho idea del perché, ma ho bisogno di scambiare addEventSource e removeEventSource ora sembra qualcosa del genere:

        viewDisplay: function(view) {
            if (lastView == undefined) { lastView = 'firstRun';  }

            //alert("viewname: "+ view.name + "lastView: " + lastView);
            if (view.name != lastView ) {
                if (view.name == 'agendaWeek') { 
                    $('#calendar').fullCalendar( 'addEventSource', shortSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }
                if (view.name == 'agendaDay') { 
                    //alert("in day: add litesource");
                    $('#calendar').fullCalendar( 'addEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }

                if (view.name == 'month') { 
                    //alert("in month: Delete litesource");
                    $('#calendar').fullCalendar( 'addEventSource', shortSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }
                lastView = view.name;
            }
        },

https://ffff65535.com


Sì - sfortunatamente a seconda di come lo guardi - potrebbe essere una caratteristica o un bug!?! La linea che è importante è

ewDisplay: function(view) {
             if (lastView == undefined) { lastView = 'firstRun';  }
             if (view.name != lastView ){ ...

Dal mio altro post!

Perché lastView == undefined ? Questo perché quando il calendario viene caricato per la prima volta anche prima che ci sia qualcosa sullo schermo, questo evento si attiva!

Quindi faccio una var = lastview e la lasciamo indefinita, quando l'evento si firstRun prima volta che assegna firstRun può essere qualcosa in realtà- ma non il nome effettivo di qualsiasi monthView Questo passaggio SKIPS il primo evento- e non aggiungerà il tuo feed due volte! Ho aggiunto entrambe queste cose come un bug agli sviluppatori .. ma ci stanno pensando, perché sono caratteristiche discutibili ..

Quindi l'unica cosa che rimane è un codice di sicurezza per un metodo di salto - ed è per questo che l'intera lastview è lì per. Ho trascorso 2 o 3 giorni cercando di eseguire il debug di questo problema; dovrai seguire il codice riga per riga e vedere quando vengono aggiunti i feed e cercare di evitarlo in qualche modo.

Non dimenticare di impostare l'ultimo viewname alla fine dell'evento.

    ...
       lastView = view.name;
    }

Solitamente cliccando sul pulsante Visualizza si attiva questo evento

Fai attenzione perché questo evento si attiverà anche se cambi i giorni nella vista di giorno o mese in mese ma tu lo passi memorizzando un'ultima variabile

jQuery ..

.
viewDisplay: function(view) { ** }
.

Sostituisci il ** con entrambi

.fullCalendar( 'refetchEvents' )

Riceverà di nuovo il tuo feed. come un aggiornamento e aggiornare le eventuali modifiche che potrebbero essersi verificate http://arshaw.com/fullcalendar/docs/event_data/refetchEvents/

o potresti cambiare sorgente

$('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=Complex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=Basic' );   

Ma per scoprire quali pulsanti sono stati cliccati dovresti farlo

 eventClick: function( event, jsEvent, view ) 
             { }