Иногда select2 не работает / загружается в плагин Moodle - PullRequest
0 голосов
/ 05 ноября 2019

Я работал с Moodle , и я создал плагин в нем. В этом я использовал библиотеку select2 .

. В моем файле плагина view.php у меня есть:

    foreach((array) $jsFiles as $path) {
    $PAGE->requires->js(new moodle_url($CFG->wwwroot . '/mod/exam/subplugins/'.$path));
}

?>

<!DOCTYPE html>
<!-- Essential to activate bootstrap -->


<html>
<head>
<link rel="stylesheet" type="text/css"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<link href="select2/select2.min.css" rel="stylesheet" />
<script src="select2/select2.full.js"></script>
<link href="select2/chart.min.css" rel="stylesheet" />
<script src="select2/chart.min.js"></script>
<title></title>
</head>
<?php

?>
</html>

<?php
echo $OUTPUT->footer();

Итак, я загружаю библиотеку здесь,И я использую его в файле javascript:

$(document).ready(function() {
    var script =  $.getScript("../../mod/exam/select2/select2.min.js");
    init();
});

В первый раз я загрузил скрипт только в функцию ready, но теперь я загружаю его также в функцию init, и этим он работает болеедовольно часто. И у меня также есть кнопка, чтобы добавить поле select2. И я загрузил скрипт с функцией $.getScript в верхней части этой функции, чтобы он работал чаще. Если я не делаю этого, когда я нажимаю на кнопку, большую часть времени, она не работает, и у меня есть что-то вроде этого:

select2 not loaded

На моей локальной машине на Windows 10 он работает 9 раз на 10 во всех браузерах (chrome, firefox ...)

Я тестировал его на другой машине на Ubuntu, и он действительно работал не часто со всемибраузеры. И я также проверил это на виртуальной машине в Linux, и это похоже на localhost. Когда я получаю к нему доступ с компьютера на Windows 10, он работает 9 раз на 10, а на компьютере на Ubuntu - очень редко.

Когда он не работает, у меня появляется эта ошибка: Uncaught Error: Mismatched anonymous define() module: function(u){var e=function...из require.min.js и после этого: createexam.js:98 Uncaught TypeError: $(...).select2 is not a function из моего файла javascript.

Я также пытался загрузить библиотеку другим способом, предоставляемым Moodle, например $this->page->requires->js(...) или без функции $.getScript. Но каждый раз он работает реже, чем сейчас.

Итак, у вас есть идея, почему она не работает каждый раз на всех машинах? Или загрузить библиотеку не лучшим образом?

1 Ответ

1 голос
/ 06 ноября 2019

Я никогда не работал с Moodle, но я работал с RequireJS. Ваш сайт использует RequireJS, а select2 поддерживает RequireJS. Таким образом, вы должны загрузить его через RequireJS. В противном случае он не будет работать, когда RequireJS загружается первым, поэтому время от времени:)

Использовать RequireJS:

require(['select2/select2.full.js', 'select2/chart.min.js'], function () {
  $(document).ready(function() {
    var script =  $.getScript("../../mod/exam/select2/select2.min.js", function () {
      init()
    });
  });
});
...