Возникли проблемы с модулями fullcalendar, чтобы найти друг друга с requirejs в Moodle - PullRequest
0 голосов
/ 11 июля 2019

Ссылка на полный календарь: https://fullcalendar.io/

Так что у меня проблемы с модулями AMD, ссылающимися друг на друга в Moodle. Я делаю документы 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

Я знаю, что это значит, но это относится к core main.js, и я думаю, что это из-за неправильной загрузки плагинов. Но я отладил все подключаемые плагины, и я могу нормально видеть все экземпляры в консоли.

...