【发布时间】:2020-01-15 19:38:55
【问题描述】:
我正在使用以下 Fullcalendar 库:
"@fullcalendar/bootstrap": "^4.1.0",
"@fullcalendar/core": "^4.1.0",
"@fullcalendar/daygrid": "^4.1.0",
"@fullcalendar/interaction": "^4.1.0",
"@fullcalendar/list": "^4.1.0",
"@fullcalendar/moment": "^4.1.0",
"@fullcalendar/moment-timezone": "^4.1.0",
"@fullcalendar/timegrid": "^4.1.0",
当我最初定义日历时,我将dateClick 和select 选项设置为指向一个函数——同一个函数。啦啦:
calendar = new FullCalendar.Calendar(
document.getElementById("calendar"), {
'plugins': [
"interaction",
"dayGrid",
"timeGrid",
"bootstrap",
"list",
"moment",
"momentTimezone"
],
...
'dateClick': DateClick_and_Selection,
'select': DateClick_and_Selection,
...
这是“工作”。我的问题是关于触发这两个动作的事件。
如果我正在查看 timeGridDay 视图并单击并拖动以选择时间范围,那么只会调用 select 函数 -- 这是我所期望的。
如果我只单击网格中的一个时间框,那么 dateClick 和 select 函数都会被调用——这不是我所期望的。
老实说,我不记得这种情况是否一直在发生,或者我只是注意到了。
这是新行为吗?
这正常吗?
如果正常,那么我知道传递给函数的info 对象的内容对于这两个事件是不同的。我知道我可以创建两个不同的函数,但我目前猜测这将是一场赛跑,看看哪个函数先触发。
我做错了吗?有没有更好的方法来解决这个问题?
我试图创建一个小提琴,但各种 fullcalendar 库似乎对顺序敏感,我找不到正确的顺序。
想法?
【问题讨论】:
-
“dateClick 和 select 函数都被调用了——不是我所期望的。”...为什么不呢?你点击了一个日期。您还选择了一个日期/时间(尽管是一个日期/时间,而不是一个范围......但 fullCalendar 会为此设置一个默认结束日期)。您的操作触发了这两个事件,仅此而已。为什么你决定让它们都触发相同的功能,我不太清楚。 (顺便说一句,这不是新行为,不,在以前的版本中是一样的。)这是一个可以 fork 的 CodePen,如果你想玩演示:codepen.io/ADyson82/pen/jOOzjXJ
-
“我做错了什么吗?有没有更好的方法来处理这个问题?”...处理什么?我不确定您要解决什么问题。这里有两种不同的回调。它们的目的略有不同。在某些情况下,它们可能都会响应相同的刺激而开火。这本身不是问题。所以很简单......决定使用哪一个,然后使用它。如果您不确定要使用哪一个,请说明您想要达到的目标,也许我们可以为您提供建议。
-
谢谢!你让我以稍微不同的方式思考这个问题。所以问题是,如果两个函数挂钩都被调用并且我想对时间范围做一些事情,那么至少在我的情况下,第二个事件“获胜”。不幸的是,第二个函数调用并不总是具有我期望的日期/时间范围。我的“解决方案”似乎是不使用
dateClick钩子,只依赖select。 -
好主意。我想不出在很多情况下你都需要两者。
标签: javascript fullcalendar fullcalendar-4