javascript - महीने के लिए कॉलबैक, सप्ताह, दिन का शीर्षक बार बटन क्लिक?



html javascript-events (2)

कैलेंडर को पुनः लोड करने के लिए मुझे कुछ जावास्क्रिप्ट कोड चलाने की आवश्यकता है जब उपयोगकर्ता क्लिक, दिन / सप्ताह / महीना बटन क्या दिनबटन की तरह कोई कॉलबैक () या कुछ और है?

बुग हो रहा है:

जब मैं पहली बार कैलेंडर लोड करता हूँ शुरुआती दृश्य में ठीक लगता है कि खदान शुरू में लोड होता है। जैसे ही मैं सप्ताह के रूप में एक और दृश्य लोड हर एकल प्रविष्टि दोहराया जाता है और डेटा के दोनों स्रोतों को प्रदर्शित करता है। अगर मैं फिर वापस दिन और महीने के बीच फिर से क्लिक करता हूं तो डेटा वापस सामान्य हो जाता है क्या हो रहा है, हटाए जाने वाले ऐवेंटसोर्स को पहले से सप्ताह पर क्लिक करने के बाद नया दृश्य लोड होने पर कॉल नहीं किया जा रहा है क्या आपने देखा है कि इससे पहले होगा?

<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>

मैंने आपके कोड को ठीक से कॉपी किया है कि आप यह कैसे करते हैं क्योंकि मैंने सोचा था कि मेरे कोड के साथ एक समस्या थी। भले ही मैं इस पर परिवर्तन:

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

जब मैं डिफ़ॉल्ट लोड किए गए दृश्य से दूसरे स्थान पर ले जाता हूं, तब भी यह डेटा लोड करता है। मुझे लगता है कि यह निश्चित रूप से पूर्ण कैलेंडर में एक बग है शुरू करना शुरू कर रहा हूँ यह मुझे पागल चला रहा है

2 संपादित करें: मेरा भगवान मैं विश्वास नहीं कर सकता यह अंत में काम करता है!

मुझे पता नहीं क्यों है लेकिन मुझे addEventSource चारों ओर स्वैप करने की जरूरत है और इसे removeEventSource अब ऐसा कुछ दिखता है:

        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://src-bin.com


Answer #1

हां - दुर्भाग्य से आप इसे कैसे देखते हैं - यह एक फीचर या बग भी हो सकता है?!! महत्वपूर्ण है कि लाइन है

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

मेरे दूसरे पोस्ट से!

आखिर क्यों करता है lastView == undefined ? इसका कारण यह है कि जब कैलेंडर पहले भी लोड होता है तब भी स्क्रीन पर कुछ भी होता है जो इस घटना को आग लगा देता है!

इसलिए मैं एक var = lastview एक अवकाश बना देता हूं, जब घटना पहली बार आग लगाती है पहले firstRun यह firstRun कुछ भी हो सकता firstRun लेकिन किसी भी monthView का वास्तविक नाम नहीं है। यह कदम पहले monthView और आपकी फ़ीड दो बार जोड़ना अभ्यस्त होगा! मैंने इन दोनों बातों को डेवलपर्स के साथ एक बग के रूप में जोड़ा है .. लेकिन वे इसके बारे में सोच रहे हैं- क्योंकि वे तर्कसंगत विशेषताएं हैं ..

इसलिए केवल एक चीज को छोड़ दिया जाता है कड़ी मेहनत को छोड़ना एक lastview और यही कारण है कि इस पूरे lastview लिए वहाँ है। मैंने उस समस्या को डिबग करने के लिए 2 या 3 दिन खर्च किए हैं; आपको लाइन द्वारा अपने कोड लाइन का पालन करने की आवश्यकता होगी और देखें कि जब फीड जोड़े जा रहे हैं और इसे किसी तरह से बचने का प्रयास करें।

ईवेंट के अंत में अंतिम viewname सेट करने के लिए मत भूलें।

    ...
       lastView = view.name;
    }

Answer #2

आम तौर पर दृश्य बटन पर क्लिक करके इस घटना को ध्वस्त करेगा

सावधान रहें क्योंकि यदि आप दिन दृश्यों या महीनों के महीनों के दिनों में परिवर्तन करते हैं, लेकिन आप पास से पास हो जाते हैं, तो यह इवेंट भी खराब हो जाएगा, अंतिम चर को संचय करके

jQuery ..

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

** या तो साथ बदलें

.fullCalendar( 'refetchEvents' )

यह आपकी फ़ीड को फिर से मिल जाएगा ताज़ा करें और किसी भी परिवर्तन को अपडेट करें जैसे http://arshaw.com/fullcalendar/docs/event_data/refetchEvents/

या आप स्रोत स्विच कर सकते हैं

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

लेकिन यह पता लगाने के लिए कि कौन से बटन क्लिक किए गए थे, आपको ऐसा करने की आवश्यकता होगी

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