2012-08-16 66 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); 
    }, 
    ... 
});