2012-08-16 70 views
2

在基於來自URL的信息加載頁面和日曆後,試圖讓我突出顯示特定事件時,我瞭解到我已獲取事件對象以使用updateEvent。我還了解到,使用clientEvents是你應該這樣做的方式。當我嘗試使用clientEvents時,我只是簡單地返回一個空數組。該文檔和source似乎同意,如果我不提供可選的參數,那麼我應該取回當前在我的日曆上的所有內容。Fullcalendar clientEvents長度爲零

<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script> 
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js'></script> 
<script type='text/javascript'> 
$(document).ready(function() { 

    $('#calendar').fullCalendar({ 
    defaultView: 'agendaWeek', 
    header: { 
     left: 'prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay', 
    }, 
    }); 

    $('#calendar').fullCalendar('addEventSource', 
    { url: 'https://www.example.org/combinedcalendar/feed/json.php', 
     dataType: 'jsonp'}); 

    console.log($('#calendar').fullCalendar('clientEvents').length); 

}); 
</script> 
<div id='calendar'></div> 

在javascript控制檯中記錄的值爲0;

回答

6

當我編寫這個問題並測試一些東西時,我意識到首先應該明顯的是什麼。使用ajax的$('#calendar').fullCalendar('addEventSource',...);調用是異步的。因此,在之前clientEvents發生在控制檯發生的事件數據實際下載並添加到日曆中。

我將日誌記錄移入fullCalendar loading函數,該函數在啓動或完成加載時觸發。

$('#calendar').fullCalendar({ 
    loading:function(isLoading,view){ 
    if (!isLoading) 
    { 
     console.log($('#calendar').fullCalendar('clientEvents').length); 
    } 
    }, 
    ... 
}); 
2

我試過Zoredache的代碼片段,但發現它並沒有涵蓋加載時的情況。 在這種情況下,它看起來更好地做功能來檢查加載是否已完成:

function onCalLoad(el, isLoading, view){ 
    if (isLoading){ 
    setTimeout(onCalLoad, 300); 
    } else { 
    if (el.fullCalendar('clientEvents').length==0){ 
     some ops.. 
    }; 
    } 
} 
$('#calendar').fullCalendar({ 
    loading:function(isLoading,view){ 
    onCalLoad($(this), isLoading, view); 
    }, 
    ... 
});