2013-09-10 18 views
7

Takvim etkinliğini görüntülemek için sitemdeki FullCalendar eklentisini kullanıyorum. Şimdi eklemeye çalıştığım şey, bir açılır menü ve ismiyle açılır menü açılırsa, menüdeki değere göre olayları yeniden yükle.FullCalendar nasıl yeniden yüklenir jQuery kullanarak bir menü değeri değiştiğinde?

Başka bir deyişle, varsayılan olarak, bana ait olayları yüklüyorum. Açılır menüde tüm kullanıcılar tek bir menüde olacak. Bu menüden aynı sayfada diğer kullanıcıların etkinliklerini görüntülemek için kullanıcı adını değiştirebilirim.

Açılır menüde bir .change() olayı ve fullCalendar üzerinde refetchEvents eklemeyi denedim ancak çalışmaz.

Birisi bana $ ('# users_menu') değerini geçerek bu olayları yeniden yükleme konusunda yardımcı olabilir.

zaman geçerli kod benim veri yöntemde benim user_id değeri geçmesi

$(document).ready(function() { 

    $('#calendar').fullCalendar({ 

     header: { 
      right: 'prev,next today', 
      center: 'title', 
      left: 'month,agendaWeek,agendaDay' 
     },  

     events: { 
      url: "ajax/getMyEvents.php", 
      type: 'POST', 
      data: { 
       user_id: $('#users_menu').val() 
      } 
     }, 
     timeFormat: 'h:mm TT{ - h:mm} TT', 
     defaultView: 'agendaDay', 


     eventDrop: function(event, delta, minuteDelta, allDay, revertFunc) { 

      if (!confirm("Are you sure about this change?")) { 
       revertFunc(); 
      } 
      updateEvent(event, delta, minuteDelta, allDay, 'Drop', revertFunc); 
     }, 

     eventResize: function(event, delta, minuteDelta, revertFunc) { 

      if (!confirm("Are you sure about this change?")) { 
       revertFunc(); 
      } 
      updateEvent(event, delta, minuteDelta, false, 'endResize', revertFunc); 
     } 


    }); 


    $('#users_menu').change(function(){ 

     $('#calendar').fullCalendar('refetchEvents'); 
    }); 

}); 

Not aşağıdadır.

Bu kod, yüklemede çalışır ancak açılır menüden kullanıcı adını değiştirdiğimde yeni olayları yeniden yüklemez.

Bunu nasıl çalıştırabilirim?

+0

Bunu jfiddle olabilir mi? – Idipaolo

+0

Sunucuya bir AJAX isteği gönderdiğim için bunu nasıl yapacağımı bilmiyorum. Ama sorun çünkü $ ('# users_menu'). Val() beeing $ ('# takvim') geçti. Refetch olayı içinde fullCalendar – Jaylen

+0

Gerçekten garip, ajax istek günlüğü kontrol edin! – Idipaolo

cevap

14

Sonunda tamir ettim. Sonra addEventDource sonra refetchEvents bu deneyin :) serin olmadığı İşte

bu

$('#users_menu').change(function(){ 

     var events = { 
      url: "ajax/getMyEvents.php", 
      type: 'POST', 
      data: { 
       user_id: $(this).val() 
      } 
     } 

     $('#calendar').fullCalendar('removeEventSource', events); 
     $('#calendar').fullCalendar('addEventSource', events);   
     $('#calendar').fullCalendar('refetchEvents'); 
    }).change(); 
+3

Cevabınızı paylaştığınız için teşekkür ederiz. Sadece bana yardım etti. .change() ile fark ettim; ajax çağrısını geliştirici araçlarına göre iki kez ateşler. – steve

+1

Kendi cevabınızı kabul etmeyi düşünmelisiniz. – royhowie

+0

@steve Ajax çağrısı iki kez tetiklenir, çünkü addEventSource bunu ilk kez tetikler ve refetchEvents tekrar yapar. – fallektcz

1

benim çözüm kod olduğunu çalışması için removeEventSource zorunda ..... bu fonksiyon tekrar olay ajax ateş edeceği .....

$('#conrollerId').on('change', loadEvents); 

function loadEvents() { 
    $('#calendar').fullCalendar('removeEvents'); 
    $('#calendar').fullCalendar('refetchEvents'); 

} 
0
function bindCal(id) { 
    var ddlStudio1Value = $("#ddlStudio1 option:selected").val(); 
    $('#calendar').fullCalendar('addEventSource', function (start, end, timezone, callback) { 
     $.ajax({ 
      url: '@Url.Action("GetEvents", "FacultySchedule")', 
      data: "{'status':'','StudioId':'" + ddlStudio1Value + "','FacultyId':0,'start':'" + start + "', 'end':'" + end + "'}", 
      dataType: "json", 
      type: "POST", 
      async: false, 
      contentType: "application/json; charset=utf-8", 
      success: function (doc) { 
       var events = []; 
       var EventIds = "0"; 
       $(doc).each(function() { 
        $('#calendar').fullCalendar('removeEvents', $(this).attr('id')); 
        events.push({ 
         id: $(this).attr('id'), 
         title: $(this).attr('title'), 
         start: $(this).attr('start'), 
         end: $(this).attr('end'), 
         color: $(this).attr('color'), 
         textColor: $(this).attr('textColor'), 
         someKey: $(this).attr('someKey'), 
         allDay: $(this).attr('allDay'), 
         CreatedBy: $(this).attr('CreatedBy'), 
         StatusRemark: $(this).attr('StatusRemark'), 
         DurationMnt: $(this).attr('DurationMnt'), 
         Studio: $(this).attr('Studio') 
        }); 
       }); 
       callback(events); 
      }, 
      error: function (response) { 
       alert(response.responseText); 
      } 
     }); 
    }); 
} 
İlgili konular