Rails 6 - 如何在 js.erb 文件中引用 javascript 文件变量?
Rails 6 - How to refer to javascript file variable in js.erb file?
我的 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 TypeError: calendar.getEventById is not a function
(这里的getEventById应该是正确的https://fullcalendar.io/docs/Calendar-getEventById)
如何在destroy.js.erb中正确引用calendar.js中的日历,以便在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();
});
摧毁。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文件中删除了var calendar = document.getElementById('calendar');
,但不幸的是错误没有解决,所以添加了console.log(calendar)
来销毁.js.erb 查看“日历”指的是什么。我得到的是来自 index.html.erb 的 <div id="calendar"></div>
元素。所以
//destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();
“日历”目前指的是 div 而不是 calendar.js 中的日历对象。我还尝试在 calendar.js 中将 calendar
重命名为 fullcalendar
以区分 div 和日历,但现在我收到“未捕获的引用错误:未定义完整日历”。
var calendar = new Calendar ..
已经定义(在 calendar.js
中)并且是 Calendar
。
因此,如果您在 destroy.js.erb
中重新定义 var calendar = document.getElementById('calendar');
,则变量 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
这很好,因为我们很快就会失败。
我的 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 TypeError: calendar.getEventById is not a function
(这里的getEventById应该是正确的https://fullcalendar.io/docs/Calendar-getEventById)
如何在destroy.js.erb中正确引用calendar.js中的日历,以便在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();
});
摧毁。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文件中删除了var calendar = document.getElementById('calendar');
,但不幸的是错误没有解决,所以添加了console.log(calendar)
来销毁.js.erb 查看“日历”指的是什么。我得到的是来自 index.html.erb 的 <div id="calendar"></div>
元素。所以
//destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();
“日历”目前指的是 div 而不是 calendar.js 中的日历对象。我还尝试在 calendar.js 中将 calendar
重命名为 fullcalendar
以区分 div 和日历,但现在我收到“未捕获的引用错误:未定义完整日历”。
var calendar = new Calendar ..
已经定义(在 calendar.js
中)并且是 Calendar
。
因此,如果您在 destroy.js.erb
中重新定义 var calendar = document.getElementById('calendar');
,则变量 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
这很好,因为我们很快就会失败。