完整日历,将逻辑应用于 defaultDate 设置
Full Calendar, apply logic to defaultDate setting
去年我一直在学习 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
为什么,我该如何解决?
如果您查看 defaultDate
you can see that it takes a moment
的完整日历文档。时刻是一种日期对象,而不是函数。
一些 fullcalendar 选项可以接受函数或对象,它们在文档中是这样指定的(例如selectOverlap
)。但是对于 defaultDate 它需要一个 moment 对象。
Momentjs 是 运行 全日历所需的另一个 JS 脚本。它比标准 JS 日期对象更好地处理日期。但是您可以保留现有代码,因为 moment 的构造函数可以解析 JS 日期。
所以,您需要做的就是传递一个时刻(或日期)而不是一个函数。
函数是JS中的对象。目前你说的是 "pass this function as an abject"。就像您要传递 回调 一样。
defaultDate: defaultDateLogic,
相反,您需要说 "run this function and then pass the returned object"。
defaultDate: defaultDateLogic(),
简洁明了。
注:
这只会 运行 一次(当 fullcalendar 被初始化时)。如果你希望它在每次 fullcalendar 查找它的 defaultDate
时 运行... 那么你不能。 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
为什么,我该如何解决?
如果您查看 defaultDate
you can see that it takes a moment
的完整日历文档。时刻是一种日期对象,而不是函数。
一些 fullcalendar 选项可以接受函数或对象,它们在文档中是这样指定的(例如selectOverlap
)。但是对于 defaultDate 它需要一个 moment 对象。
Momentjs 是 运行 全日历所需的另一个 JS 脚本。它比标准 JS 日期对象更好地处理日期。但是您可以保留现有代码,因为 moment 的构造函数可以解析 JS 日期。
所以,您需要做的就是传递一个时刻(或日期)而不是一个函数。
函数是JS中的对象。目前你说的是 "pass this function as an abject"。就像您要传递 回调 一样。
defaultDate: defaultDateLogic,
相反,您需要说 "run this function and then pass the returned object"。
defaultDate: defaultDateLogic(),
简洁明了。
注:
这只会 运行 一次(当 fullcalendar 被初始化时)。如果你希望它在每次 fullcalendar 查找它的 defaultDate
时 运行... 那么你不能。 fullcalendar 不支持此功能。