2012-06-26 1 views
1

Я использую приведенный ниже код для инициализации полного календаря jQuery.jQuery FullCalendar. По умолчанию в первый месяц с событием

Однако не все месяцы имеют какие-либо события. Я хотел бы, чтобы начальный месяц в календаре был первым месяцем с событием.

Как пример. В настоящее время в июне нет событий в календаре до августа, поэтому я хотел бы, чтобы начальное представление календаря было по умолчанию в августе, а не в июне.

Аналогичным образом, если в июне были события ARE, я хотел бы, чтобы это было по умолчанию до июня.

$('#fullCalendar').fullCalendar({ 
      selectable: true, 
      selectHelper: true, 
      header: { 
       left: 'prev', 
       center: 'title', 
       right: 'next' 
      }, 
      events: function(start, end, callback) { 

       $.getJSON(jSONCalendarURL, { 
          token:jSONAPItoken, 
          productID: $('#fullCalendar').attr("data-id"), 
          startDate: $.fullCalendar.formatDate(start, 'yyyy-MM-dd'), 
          endDate: $.fullCalendar.formatDate(end, 'yyyy-MM-dd') 
         }, function(data){ 
         var calevents = []; 
         $.each(data.response, function(index,item){ 
          calDate = index; 
          child = item.Variations; 
          if (child.length > 0){ 
           if (!$.isEmptyObject(child)){ 
            calPrice = child[0].Price; 
            calID = child[0].ID; 
            calAvailable = child[0].Available; 
            calevents.push({ 
             'id': calID, 
             'title': buildEventTitle(calAvailable,calDate.substring(calDate.length,calDate.length-2),child[0].Price, calID, child[0].RRP), 
             'start': $.fullCalendar.parseDate(calDate), 
             'end': $.fullCalendar.parseDate(calDate), 
             'allDay': true 
            }); 

           } 
          } 
         }); 
         callback(calevents); 
         highlightExisting(); 

        } 
       ); 
      }, 

      eventRender: function (event, element, view) { 
       if (event.start.getMonth() != view.start.getMonth()) 
        return false; 
      }, 
      weekMode:'liquid' 
     }); 

Является ли то, что я пытаюсь сделать достижимым?

ответ

6

Определенно достижимый! Вам нужно сначала начать с сортировки вашего массива событий и поиска следующего зарегистрированного объекта события. Затем вы можете использовать метод .fullCalendar ('gotoDate') для перехода к этой дате.

Что-то вроде этого:

function custom_sort(a, b) { 
    return new Date(a.start).getTime() - new Date(b.start).getTime(); 
} 

events_array.sort(custom_sort); 

$('#calendar').fullCalendar('gotoDate', events_array[0].start); 

Пожалуйста, обратитесь эту FIDDLE для рабочего статического примера.

Надеюсь, это поможет!

+1

О, и убедитесь, что следующая дата больше, чем сегодня (или в предыдущем месяце) - чтобы вы не вернулись назад. – ganeshk

+0

Как достичь этого, если события извлекаются по URL и не помещаются в массив? – cwhisperer

Смежные вопросы