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 に答える