我在Rails 6应用程序中安装并运行了一个javascript日历(FullCalendar v5),除了我的js.erb文件之外,一切正常。例如,当删除日历事件时,该事件将正确地从数据库中删除,Rails将正确地转到我的destroy.js.erb文件中。但是,我的js.erb文件不识别带有代码的日历。
var calendar = document.getElementById('calendar');
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();当我得到以下错误时:
Uncaught : calendar.getEventById不是一个函数
(getEventById在这里应该是正确的,https://fullcalendar.io/docs/Calendar-getEventById)
如何在calendar.js中正确引用destroy.js.erb中的日历,以便在js.erb文件中使用与FullCalendar库相关的方法?
下面是与此错误相关的当前代码:
calendar.js
import { Calendar } from '@fullcalendar/core';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
document.addEventListener("turbolinks:load", () => {
var calendarEl = document.getElementById('calendar');
var calendar = new Calendar(calendarEl, {
plugins: [dayGridPlugin, interactionPlugin],
selectable: true,
editable: true,
events: "/calendar_events.json",
eventClick: function (info) {
$.getScript(info.event.extendedProps.edit_url, function () { });
},
});
calendar.render();
});destroy.js.erb:
var calendar = document.getElementById('calendar');
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();index.html.erb
<div id="calendar"></div>我完全是Javascript的初学者,在这里呆了一段时间,所以任何帮助都会很感激!:)
到目前为止,我尝试过的是:我按照建议从destroy.js.erb文件中删除了destroy.js.erb,但不幸的是,错误没有得到解决,于是向destroy.js.erb添加了console.log(calendar)以查看“日历”指的是什么。我得到的是来自<div id="calendar"></div>的index.html.erb元素。所以
//destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();“日历”目前指的是div,而不是calendar.js中的日历对象。为了区分div和日历,我还尝试将calendar重命名为fullcalendar in calendar.js,但现在我得到了“未定义的ReferenceError:未定义完整日历”。
发布于 2021-06-14 15:50:19
var calendar = new Calendar ..已经定义(在calendar.js中),它是Calendar。因此,如果在var calendar = document.getElementById('calendar');中重新定义destroy.js.erb,变量calendar不再是Calendar。
因此,1.确保导入了calendar.js。
2.删除重新定义的日历
// destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();请注意,最好将日历定义为常量
const calendar = new Calendar(calendarEl, { ...`然后,任何试图重新定义日历的.js.erb文件都会显示错误redeclaration,这很好,因为我们很快就失败了。
https://stackoverflow.com/questions/67972088
复制相似问题