javascript - 将 FullCalendar eventRender 升级为 eventDidMount 以进行右键单击操作
问题描述
我想将现有的 FullCalendar (v3.9 -> v5.7) 升级eventRender
到eventDidMount
右键单击操作。
我有一个网页(FullCalendar v3.9.0),它使用以下eventRender
代码进行右键单击操作:
eventRender: function (event, element, view) {
element.bind('contextmenu', function (e) {
e.preventDefault();
var top = e.pageY;
var left = e.pageX;
// Display contextmenu and bind event for menu click events
$("#contextMenu").show();
$("#contextMenu").css({ position: 'absolute' });
$("#contextMenu").offset({ left: left, top: top });
$("#contextMenu").on("click", "li", { eventId: event.id }, contextMenuHandler);
});
}
function contextMenuHandler(event) {
var idx = $(this).index();
console.log(idx + ' ' + event.data.eventId);
switch( idx )
{
// Miss 2 out as that is line separator
case 0: cloneEvent(event.data.eventId); break;
case 1: copyEvent(event.data.eventId); break;
case 3: deleteEvent(event.data.eventId); break;
default:
}
}
$(document).on('click', function (e) {
$("#contextMenu").hide();
$("#contextMenu").unbind().click(function () { }); // Make sure click event is removed from contextmenu otherwise it will fire multiple times!
});
function editEvent(id) {
alert('edit');
}
function deleteEvent(id) {
//if (confirm("Confirm Deletion?")) {
alert('delete');
//}
}
function cloneEvent(id) {
alert('clone');
}
function copyEvent(id) {
alert('copy');
}
<div>
<div id="calendar"></div>
<ul id="contextMenu" class="dropdown-menu" role="menu">
<li><a tabindex="-1" href="#">Clone</a></li>
<li><a tabindex="-1" href="#">Copy</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#">Delete</a></li>
</ul>
</div>
omitted
更新到版本 5.7.0 这已被替换为事件渲染挂钩
是eventDidMount
正确的方法吗?
eventDidMount: function (info) {
info.el.addEventListener('contextmenu', function (e) {
e.preventDefault();
var top = e.pageY;
var left = e.pageX;
// Display contextmenu and bind event for menu click events
$("#contextMenu").show();
$("#contextMenu").css({ position: 'absolute' });
$("#contextMenu").offset({ left: left, top: top });
$("#contextMenu").on("click", "li", { eventId: event.id }, contextMenuHandler);
});
}
将显示上下文菜单,但是当我单击其中一个操作(例如“克隆”)时,它会从jquery中产生一个TypeError。dispatch
TypeError: ((S.event.special[o.origType]||{}).handle||o.handler).apply is not a function. (In '((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s)', '((S.event.special[o.origType]||{}).handle||o.handler).apply' is undefined)
eventDidMount
显示工具提示的示例。
样品
- 5.7.0(来自 ADyson)https://codepen.io/ADyson82/pen/GRWPmMJ
- 3.9.0 (WIP) https://codepen.io/AlexHedley/pen/VwpqbdZ
解决方案
推荐阅读
- xslt - 无法使用“UTF-8”和“ISO-8859-1”显示字符“Œ œ Š š Ÿ † ‡ • ... ‰ € ™”
- jestjs - 如何在不抛出所有测试的情况下停止开玩笑描述
- python - 我如何测量算法在整个运行过程中所用的时间?
- reactjs - 如何修复未定义:属性错误 setTargetNode
- google-chrome - 自动捕获屏幕短片,包括 chrome devtools 窗口
- javascript - 我应该使用表单的提交事件还是使用ajax?
- javafx - 从另一个场景更新打开的场景
- c# - 如何使用 C# 创建带日期时间的文本文件名
- google-cloud-platform - 我正在寻找在 Google Data Studio 中绘制折线图(温度与时间戳)
- lua - i2c.address(id, devAdress, i2c.TRANSMITTER) 函数的 FALSE 结果