为什么';当跨越一个月时,jQuery FullCalendar是否要求在周视图中重新提取事件?

为什么';当跨越一个月时,jQuery FullCalendar是否要求在周视图中重新提取事件?,jquery,ajax,fullcalendar,Jquery,Ajax,Fullcalendar,我使用的是在月视图中非常有效的。我现在正在和week view玩游戏。问题是,当我一周又一周地来回移动时,它似乎只会在新的一个月的一周开始时重新记录事件。因此,如果有一个周视图是一个月的1/2和一个新月的1/2(例如,2012年7月的最后一周,从7月29日开始,到8月4日结束),则它不会请求重新绘制事件。它只在我再次单击“前进”并且我在(8月5日至8月11日)的一周时重新绘制事件 问题是我只在服务器上加载一个特定月份的事件(因此我不会在下个月的前几天加载)。请参阅下面我的代码,我在其中输入月份和

我使用的是在月视图中非常有效的。我现在正在和week view玩游戏。问题是,当我一周又一周地来回移动时,它似乎只会在新的一个月的一周开始时重新记录事件。因此,如果有一个周视图是一个月的1/2和一个新月的1/2(例如,2012年7月的最后一周,从7月29日开始,到8月4日结束),则它不会请求重新绘制事件。它只在我再次单击“前进”并且我在(8月5日至8月11日)的一周时重新绘制事件

问题是我只在服务器上加载一个特定月份的事件(因此我不会在下个月的前几天加载)。请参阅下面我的代码,我在其中输入月份和年份,以便我的服务器知道要查询哪些数据

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

这是出于设计,我真的应该返回下个月第一周的活动,还是这是一个bug?为什么完整日历没有触发事件请求?

您是否尝试过使用
$(“#calendar”).fullCalendar('getView')

这将返回一个包含开始和结束时间的。您可以传递这些值,而不是传递单个月份和年份,并返回视图显示的时间跨度内发生的所有事件

更好的是,您可以使用FullCalendar的拉取功能。开始值和结束值将自动作为url参数传递,并且在视图更改时(例如从一周到一周、一个月到一个月、一天到一天或从任何主视图移动时)会更新事件


编辑:重读此内容后,您可能还想尝试将其设置为false。

这是因为您的默认视图设置为月份。加载日历时,它将加载整个月的事件。现在,当您切换到周视图时,不会加载事件,因为它已经有整个月的事件。FullCalendar智能地获取事件。 如果将默认视图设置为“周”或“日”,如下所示:

defaultView: 'agendaWeek',
您将看到它将分别加载每周的事件。
我希望这有帮助。感谢您不用定义您自己的
$。ajax(…)
功能和设置您自己的范围(通过解析
。fullCalendar('getDate')
)使用内置数据源。然后将可见的日历范围作为ajax服务器端事件获取的输入

初始化
.fullCalendar(…)
时设置源代码。请参阅上的文档

$(“#日历”).fullCalendar({
//将其他完整日历选项也放在此处
事件来源:[
{
url:“/EventCalendar/GetCalEvents/”,
数据类型:“json”,
错误:函数(jqXHR、textStatus、errorshown){
//记录获取事件时发生的任何错误
if(console&&console.error){console.error(参数);}
警报(“无法获取事件,请检查javascript控制台错误日志。”);
}
}
]
});
/EventCalendar/GetCalEvents/
的请求将包含两个(自1970年起为秒):

  • :第一个可见日的开始(包括)
  • :最后一个可见日期的结束(独占)
  • :一个可选的非静态数字,用作输入。忽略这一点
对服务器的请求示例

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

只需解析日期值,并返回任何与
开始
-
结束
范围的任何部分重叠的日历事件。

我认为将数据传递到后端没有错。.数据被传递了,,,这就是我所做的…我对Fullcalendar是新手…这对我来说是有效的

 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存储库)中完成的

$Rowdata1=($this->holidayFixed->getValueMonth(“一年中的月份”,“本月的美元”); $Rowdata2=$this->holidayMovable->getValueMonth(“monthID”,$this->month)


抓得好!你尝试过不同的工作模式吗?像
weekMode:'liquid'
weekMode:'variable'
public function LoadHoliday(Request $request)
{



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


        $month++;
        $this->month=$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;

        }


    }


}