全日历模块在Moodle中与requirejs相互查找时遇到问题

时间:2019-07-11 06:58:10

标签: javascript requirejs fullcalendar moodle

链接到全日历:https://fullcalendar.io/

因此,我遇到了Moodle中相互引用的AMD模块的问题。我Moodle的文档显示了如何包括第三方AMD模块,实际上这个示例就是我试图包括的示例。自从编写新版本的文档问世以来,它不再能正常工作了。

我已将其“正常工作”,但出现一个错误,即它无法获取插件列表的长度。我怀疑这是因为插件未正确加载,否则是fullcalendar插件本身存在错误。

我已经在线阅读了,在新版本中,您应该加载插件,然后将实例传递给主插件。

config.js 这是用于加载模块的配置文件(Moodle方式):

define([], function(){
    window.requirejs.config({
        paths: {
            "@fullcalendar/core":  M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/core/main.min',
            "@fullcalendar/daygrid":  M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/daygrid/main.min',
            "@fullcalendar/timegrid":  M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/timegrid/main.min',
            "@fullcalendar/list":  M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/list/main.min',
            "@fullcalendar/bootstrap": M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/bootstrap/main.min',
            "@fullcalendar/moment": M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/moment/main.min',
            "@fullcalendar/rrule": M.cfg.wwwroot + '/blocks/pxeventcalendar/vendors/fullcalendar-4.2.0/packages/rrule/main.min'
        },
        shim: {
            "core": {exports: "@fullcalendar/core"},
            "dayGrid": {exports: "@fullcalendar/daygrid"},
            "timeGrid": {exports: "@fullcalendar/timegrid"},
            "list": {exports: "@fullcalendar/list"},
            "bootstrap": {exports: "@fullcalendar/bootstrap"},
            "moment": {exports: "@fullcalendar/moment"},
            "rrule": {exports: "@fullcalendar/rrule"}
        }
    });
});

daygrid.js 然后我添加了每个这样的插件:

define(['block_pxeventcalendar/config', '@fullcalendar/daygrid'], function(unused, dayGrid){
    return dayGrid;
});

pxcalendar.js 最后,我创建了自己的模块,在其中使用日历:

define([
    'block_pxeventcalendar/fullcalendar',
    'block_pxeventcalendar/daygrid',
    'block_pxeventcalendar/timegrid',
    'block_pxeventcalendar/list'
], function(FullCalendar, dayGrid, timeGrid, list){
    return {
        init: function(){
            new FullCalendar.Calendar(document.querySelector('#calendar'), {
                plugins: [dayGrid, timeGrid, list]
            });
        }
    };
});

我当然有一个HTML页面,其中:

<div id="calendar"></div>

我希望日历显示出来,但是我在控制台中收到以下消息:

Cannot read property 'length' of undefined

我知道这是什么意思,但是它指向核心main.js,我认为这是因为插件未正确加载。但是我已经调试了所有插入的插件,并且可以很好地在控制台中找到所有实例。

0 个答案:

没有答案