完整日历,将逻辑应用于defaultDate设置

时间:2015-04-10 12:20:22

标签: javascript calendar fullcalendar

去年我一直在学习Ruby,而且我对JS很新,所以我会尽力解释这个。

我正在使用Adam Shaw's full calendar plugin。日历显示用户指定的时间段内的事件。 我想在defaultDate设置中应用一些逻辑来规定以下内容:

如果开始月份大于或等于当前月份,则默认视图应为开始月份,而不是当前月份。 如果开始月份小于或等于当月,则同样适用。

(我意识到这一切都非常冗长和蹩脚,但我正在学习我的学习)

var defaultDateLogic = function() {
  var finishDate = new Date("<%= finish.strftime("%Y-%m-%dT%H:%M:%S") %>");
  var startDate = new Date("<%= start.strftime("%Y-%m-%dT%H:%M:%S") %>");
  var todaysDate = new Date("<%= date_today.strftime("%Y-%m-%dT%H:%M:%S") %>");
  if (startDate >= todaysDate){
    startDate 
    // return this as default date
  } 
};

然后在我的日历设置中,我调用此变量

defaultDate: defaultDateLogic,
weekMode: "liquid",
events: bookingEvents, // this can be a JSON feed (extra HTTP request)
header: headerOptions,

似乎使用函数变量设置默认日期会导致fullcalendar出现此错误:

Uncaught TypeError: Cannot read property 'day' of undefinedfullcalendar.js?body=1:4614 Grid.extend.updateCellsfullcalendar.js?body=1:2869 fc.Grid.RowRenderer.extend.setRangefullcalendar.js?body=1:10018 fcViews.basic.View.extend.setRangefullcalendar.js?body=1:6644 fc.View.Class.extend.setDatefullcalendar.js?body=1:6817 fc.View.Class.extend.displayfullcalendar.js?body=1:7992 renderViewfullcalendar.js?body=1:7916 initialRenderfullcalendar.js?body=1:7880 renderfullcalendar.js?body=1:51 (anonymous function)jquery.js?body=1:385 jQuery.extend.eachjquery.js?body=1:137 jQuery.fn.jQuery.eachfullcalendar.js?body=1:30 $.fn.fullCalendarbookings:1737 setupCalendarjquery.js?body=1:3144 jQuery.Callbacks.firejquery.js?body=1:3256 jQuery.Callbacks.self.fireWithjquery.js?body=1:3468 jQuery.extend.readyjquery.js?body=1:3499 completed

为什么,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您查看defaultDate的完整日历文档,则可以看到它需要moment。片刻是一种日期对象,而不是函数。

某些 fullcalendar选项可以使用函数或对象,并且在文档中指定它们(例如selectOverlap)。但对于defaultDate,它需要一个时刻对象。

Momentjs是运行fullcalendar所需的另一个JS脚本。它比标准的JS日期对象更好地处理日期。但是你可以保留现有代码,因为moment的构造函数可以解析JS日期。

因此,您需要做的只是传递片刻(或日期)而不是函数。

函数是JS中的对象。目前你说,“把这个功能当作一个卑鄙的”。就像你传递回调一样。

defaultDate: defaultDateLogic,

相反,您需要说“运行此函数然后传递返回的对象”。

defaultDate: defaultDateLogic(),

美好而简单。

注意:

这只会运行一次(初始化fullcalendar时)。如果你想让它在每次fullcalendar查找defaultDate时运行......那么你就不能。 fullcalendar不支持此功能。