javascript - पूर्ण कैलेंण्डरज विधि पूर्ण कैलेंडर('क्लाइंट ईवेंट्स')डुप्लिकेट ईवेंट लौटाता है




jquery calendar fullcalendar (2)

clientEvents

पूर्णक्रैलेंडर में स्मृति में होने वाली ईवेंट पुनर्प्राप्त करता है
.fullCalendar( 'clientEvents' [, idOrFilter ] ) -> Array

तो यह घटनाओं की एक सरणी देता है

आप इसे संग्रहित करते हैं, एफसी को पुनः बनाएं और फिर प्रत्येक ईवेंट का स्रोत जोड़ें लेकिन स्रोत यूआरएल और कई घटनाओं के लिए समान हैं , इसलिए आपको डुप्लिकेट मिलेंगे।

असल में आप कर रहे हैं

$('.my-calendar').fullCalendar('addEventSource', {url:"/myfeed"});
$('.my-calendar').fullCalendar('addEventSource', {url:"/myfeed"});

जो आपको डुप्लिकेट देगा

इसलिए इसे ठीक करने के लिए, आप डुप्लिकेट की जांच कर सकते हैं और उन्हें जोड़ नहीं सकते। नीचे विधि जोड़ें:

var filterOutDuplicateEventSources = function(allEventSources){
    var hash = {};
    var remainingEventSources = [];
    var arrayLength = allEventSources.length;
    for (var i = 0; arrayLength !== 0 && i < arrayLength; i++) {
        var currentEventSource = allEventSources[i];
        var currentEventSourceUrl = currentEventSource.url;
        if(currentEventSourceUrl){
            if(hash[currentEventSourceUrl] === 1){
                continue; //skip this event source, we've already added it
            }else{
                hash[currentEventSourceUrl] = 1; // remember that we add this currentEventSourceUrl
                remainingEventSources.push(currentEventSource);
            }
        }else{
            //handle non-url event sources
        }
    }
    return remainingEventSources;
}

इस विधि का प्रयोग करें जैसे कि:

// Get all event sources
var allEventSources = [];
var arrayLengthClientEvents = clientEvents.length;
for (var i = 0; i < arrayLengthClientEvents; i++) {
    allEventSources.push( clientEvents[i].source );
}

// Filter out duplicated event sources
var remainingEventSources = filterOutDuplicateEventSources( allEventSources );

वैकल्पिक रूप से

तकनीकी रूप से, मैं विश्वास नहीं करता कि clientEvents उस तरह से उपयोग करने के लिए है। आपको वास्तव में क्या चाहिए एक eventSources विधि है लेकिन यह मौजूद नहीं है (एक अच्छा सुविधा अनुरोध हो सकता है)

मैं संभवतः कैलेंडर का इवेंट स्रोत राज्य को पूर्ण कैलेंडर के बाहर स्टोर करने की कोशिश करूँगा। आपने कहा था कि आपके पास ऐसे बटन हैं जो चीजों को चालू और बंद कर देते हैं, ये मूल रूप से टॉगल करते हैं? क्या आप बस अपने विभिन्न नियंत्रणों की जांच कर राज्य को निर्धारित कर सकते हैं? उन पंक्तियों के साथ कुछ बेहतर समाधान हो सकता है शायद।

मैं fullcalendar.io उपयोग कर रहा हूँ

मैं अपने कैलेंडर को गतिशील रूप से यहां तक ​​कि स्रोतों के माध्यम से भी जोड़कर आबाद करता हूं। जैसे कि:

$('.add-more-events').on('click', function(){
    var myEventSourceUrl = // ... get the event source url somehow
    var eventSourceColor = // ... get the color for this source
    var eventSource = {
        type: 'GET',
        url: myEventSourceUrl,
        color: eventSourceColor
    };
    $('.my-calendar').fullCalendar('addEventSource', eventSource);
}

इसी तरह, मैं घटनाक्रम के माध्यम से घटनाओं को निकालकर गतिशील रूप से अपने कैलेंडर को पॉप्युलेट करता हूं। जैसे कि:

$('.remove-some-events').on('click', function(){
    var myEventSourceUrl = // ... get the event source url somehow
    var eventSourceColor = // ... get the color for this source
    var eventSource = {
        type: 'GET',
        url: myEventSourceUrl,
        color: eventSourceColor
    };
    $('.my-calendar').fullCalendar('removeEventSource', eventSource);
}

अभी तक, बहुत अच्छा: नेत्रहीन, कैलेंडर (आबादी वाले) में घटनाएं दिखाई दे रही हैं, और उम्मीदवार के रूप में कैलेंडर (अपरिवर्तित) में गायब हो रहे हैं। यही है, जब भी मैं संबंधित बटन पर क्लिक करता हूं

कुछ बिंदु पर, मैं अपने कैलेंडर को दोबारा शुरू करना चाहता हूं और उन ईवेंट को फिर से प्रदर्शित करना चाहता हूं जो मेरे कैलेंडर में आखिरी बार मौजूद थीं (आखिरी घटनाओं को रखने वाले सूत्रों)।

छद्म कोड ऐसा दिखेगा:

1. Back up my events
2. Destroy my calendar
3. Create & initialize new calendar
4. Add the backed up events (see step 1) to the new calendar

इसलिए मैंने उपर्युक्त को लागू किया है:

var clientEvents = $('.my-calendar').fullCalendar('clientEvents'); /* [1] */
$('.my-calendar').fullCalendar('destroy'); /* [2] */
$('.my-calendar').fullCalendar(calendarOptions); /* [3] */
var arrayLengthClientEvents = clientEvents.length;
for (var i = 0; i < arrayLengthClientEvents; i++) {
    $('.my-calendar').fullCalendar( 'addEventSource', clientEvents[i].source);  /* [4] */
}

लेकिन किसी कारण से, मुझे $('.my-calendar').fullCalendar('clientEvents') कॉल करते समय दोहराई गई घटनाएं मिलती हैं $('.my-calendar').fullCalendar('clientEvents')

नोट: ऐसा लगता है कि हफ्ते में स्विच करते समय ऐसा हो रहा है, हालांकि इस बारे में निश्चित नहीं है, यह असंबंधित हो सकता है

संसाधन:


जैसा कि गिंटौटास ने बताया, यह ऑपरेशनल ट्रांसफॉर्मेशन द्वारा किया जाता है। जैसा कि मैंने इसे समझ लिया है, इस सुविधा पर अनुसंधान और विकास का बड़ा हिस्सा अब-निष्क्रिय Google वेव प्रोजेक्ट के हिस्से के रूप में किया गया था, और वेव प्रोटोकॉल के रूप में जाना जाता है। सौभाग्य से, Google वेव खुले-सोर्स हैं, इसलिए आप http://code.google.com/p/wave-protocol/ पर कुछ अच्छे कोड नमूने प्राप्त कर सकते हैं





javascript jquery calendar fullcalendar