2

月ビューでうまく機能するjQuery Fullcalendarプラグインを使用しています。私は今、週ビューで遊んでいます。問題は、私が週ごとに行ったり来たりすると、週の始まりが新しい月にあるときにのみイベントを再取得するように見えることです。したがって、1 か月の 1/2 と新しい月の 1/2 である週ビューがある場合 (たとえば、2012 年 7 月の最後の週で、7 月 29 日に開始し、8 月 4 日に終了する場合)、それは無効になります。イベントを再取得するための t 要求。もう一度クリックして、次の週 (8 月 5 日 - 8 月 11 日) にいる場合にのみ、イベントを再取得します。

問題は、特定の 1 か月のイベントのみをサーバーにロードしていることです (そのため、翌月の最初の数日はロードしていません)。サーバーがクエリするデータを認識できるように、月と年を渡している以下のコードを参照してください。

$.ajax({
  url: '/EventCalendar/GetCalEvents/',
  dataType: 'json',
  data: {
    month: $('#calendar').fullCalendar('getDate').getMonth() + 1,
    year: $('#calendar').fullCalendar('getDate').getUTCFullYear(),
  },
  success: function (data) {
    callback(data.Events);
  }
});

これは仕様によるもので、実際には翌月の第 1 週にもイベントを返す必要がありますか、それともバグですか? フル カレンダーがイベント リクエストをトリガーしないのはなぜですか?

4

4 に答える 4

1

独自の機能を定義して$.ajax(...)(解析によって.fullCalendar('getDate'))独自の範囲を設定する代わりに、組み込みのデータソースを使用します。次に、ajaxサーバー側のイベントフェッチへの入力として表示されるカレンダー範囲が表示されます。

初期化時にソースを設定します.fullCalendar(...)JSONカレンダーイベントデータをフェッチするためのEventSourceオプションの設定$.ajax(...)に関するドキュメントを参照してください。

$('#calendar').fullCalendar({
    // Put your other fullCalendar options here too
    eventSources: [
        {
            url: '/EventCalendar/GetCalEvents/',
            dataType: 'json',
            error: function(jqXHR, textStatus, errorThrown) {
                // Logging any error that occured fetching the events
                if(console && console.error){ console.error(arguments); }

                alert("Couldn't fetch events, check the javascript console error log.");
            }
        }
    ]
});

のリクエストに/EventCalendar/GetCalEvents/は、2つのUNIXタイムスタンプ(1970年からの秒数)が含まれます。

サーバーへのリクエストの例

/EventCalendar/GetCalEvents/?start=1262332800&end=1265011200&_=1263178646

日付値を解析し、start-end範囲の任意の部分と重複するカレンダーイベントを返します。

于 2012-07-22T00:36:00.843 に答える
1

これは、デフォルトのビューがに設定されているためです。カレンダーが読み込まれると、その月全体のイベントが読み込まれます。これで、週ビューに切り替えると、その月のイベントがすでに含まれているため、イベントはロードされません。FullCalendarはインテリジェントにイベントをフェッチします。デフォルトのビューを次のように週または日に設定した場合:

defaultView: 'agendaWeek',

毎週のイベントが個別に読み込まれることがわかります。これがお役に立てば幸いです。ありがとう

于 2012-07-19T13:16:25.330 に答える
1

使ってみました$('#calendar').fullCalendar('getView')か?

これにより、開始時刻と終了時刻を含むビュー オブジェクトが返されます。1 つの月と年を渡すのではなく、これらの値を渡し、ビューが表示されている期間中に発生したすべてのイベントを返すことができます。

さらに良いことに、完全なカレンダーの機能を使用して、json フィードから直接プルすることができます。開始値と終了値は自動的に URL パラメーターとして渡され、イベントはビューが変更されると更新されます (週から週、月から月、日から日、またはメイン ビューから移動する場合など)。

編集:これを読み直した後、lazyFetchingを false に設定することもできます。

于 2012-07-16T02:26:21.863 に答える
0

バックエンドへのデータパスは間違っていないと思います..データが渡されます..

 eventSources:
       [

           // your event source
               {

                   url: '/ajax-load-holidays',// use the `url` property
                   type: 'POST',
                   datatype: "JSON",
                   data : function()
                   { // a function that returns an object
                       var date =  new Date($('#calendar').fullCalendar('getDate'));
                       month_integer = date.getMonth();
                       year_integer = date.getFullYear();
                          return {
                              month: month_integer,
                              year: year_integer
                          }
                   },

                   error: function() {
                       alert('there was an error while fetching eventsin hol!');
                   },
                   color: 'yellow',   // a non-ajax option
                   textColor: 'blue' // a non-ajax option

               },


        ],
    eventRender: function(event, element, view) {
        // lets test if the event has a property called holiday.
        // If so and it matches '1', change the background of the correct day

        if (event.holiday == '1') {
            var dateString1 = event.start.format("YYYY-MM-DD");

            $(view.el[0]).find('.fc-day[data-date=' + dateString1 + ']')
                .css('background-color', '#FAA732','.fc-time','disable');
        }

    }

//これは私のコントローラーです...これはlaravel(MVC-repository)で行いました

public function LoadHoliday(Request $request)
{



    $this->year = $request['year'];
    $month = $request['month'];


        $month++;
        $this->month=$month;

$Rowdata1 = ($this->holidayFixed->getValueMonth("monthOfTheYear",$this-month)); $Rowdata2 = $this->holidayMovable->getValueMonth("monthID",$this->month);

    $x=0;
    $data1[] = 0;
    $data2[] = 0;
    if($Rowdata1==null && $Rowdata2==null)
    {
        return 0;
    }
    else {


       foreach($Rowdata1 as $value){

            $mon = $value->monthOfTheYear;
            $day = $value->dayOfTheMonth;



            $dateD =  $this->year. '-' . $mon . '-' . $day;


            $data1[$x] = [
                'title' => $value->description,
                'start' => $dateD,
                'holiday' => '1'

            ];
           $x++;

        }

        foreach($Rowdata2 as $value){
            $year = ($value->yearID);
            $mon = $value->monthID;
            $day = ($value->dateID);

            $dateD = $year . '-' . $mon . '-' . $day;



            $data2[$x] = [
                'title' => $value->description,
                'start' => $dateD,
                'holiday' => '1'

            ];
            $x++;

        }
        if($data1==['0'] && $data2==['0'])
        {

          return 0;
        }
        elseif($data1==['0'])
        {

            return $data2;
        }
        elseif($data2==['0'])
        {

            return $data1;
        }
        else
        {
            unset($data2['0']);
            $data3 = array_merge($data1, $data2);

            return $data3;

        }


    }


}

于 2016-12-19T04:42:51.000 に答える