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