首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 6-如何引用js.erb文件中的javascript文件变量?

问Rails 6-如何引用js.erb文件中的javascript文件变量?
EN

Stack Overflow用户
提问于 2021-06-14 14:25:37
回答 1查看 453关注 0票数 0

我在Rails 6应用程序中安装并运行了一个javascript日历(FullCalendar v5),除了我的js.erb文件之外,一切正常。例如,当删除日历事件时,该事件将正确地从数据库中删除,Rails将正确地转到我的destroy.js.erb文件中。但是,我的js.erb文件不识别带有代码的日历。

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

代码语言:javascript
复制
var calendar = document.getElementById('calendar');
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();

index.html.erb

代码语言:javascript
复制
<div id="calendar"></div>

我完全是Javascript的初学者,在这里呆了一段时间,所以任何帮助都会很感激!:)

到目前为止,我尝试过的是:我按照建议从destroy.js.erb文件中删除了destroy.js.erb,但不幸的是,错误没有得到解决,于是向destroy.js.erb添加了console.log(calendar)以查看“日历”指的是什么。我得到的是来自<div id="calendar"></div>的index.html.erb元素。所以

代码语言:javascript
复制
//destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();

“日历”目前指的是div,而不是calendar.js中的日历对象。为了区分div和日历,我还尝试将calendar重命名为fullcalendar in calendar.js,但现在我得到了“未定义的ReferenceError:未定义完整日历”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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.删除重新定义的日历

代码语言:javascript
复制
// destroy.js.erb
var event = calendar.getEventById(<%= @calendar_event.id %>);
event.remove();

请注意,最好将日历定义为常量

代码语言:javascript
复制
const calendar = new Calendar(calendarEl, { ...`

然后,任何试图重新定义日历的.js.erb文件都会显示错误redeclaration,这很好,因为我们很快就失败了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67972088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档