2

在尝试根据来自 URL 的信息加载页面和日历后突出显示特定事件时,我了解到我已经让事件对象使用updateEvent。我还了解到,使用clientEvents是您应该这样做的方式。当我尝试使用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;

4

2 回答 2

6

当我撰写这个问题并进行测试时,我意识到首先应该是显而易见的。使用 ajax的$('#calendar').fullCalendar('addEventSource',...);调用是异步的。因此,clientEvents控制台的日志记录发生事件数据实际下载并添加到日历之前。

我将我的日志记录移到了 fullCalendar加载函数中,该函数在加载开始或完成时触发。

$('#calendar').fullCalendar({ 
  loading:function(isLoading,view){
    if (!isLoading)
    {
      console.log($('#calendar').fullCalendar('clientEvents').length);
    }
  },
  ...
});
于 2012-08-16T21:25:25.740 回答
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);
  },
  ...
});
于 2014-04-09T12:19:09.320 回答