NodeJS с веб-пакетом jQuery.Deferred исключения: o (...). Select2 не является функцией TypeError: o (...). Select2 не является функцией - PullRequest
0 голосов
/ 05 июня 2019

Я изменяю свое приложение для использования nodejs и просмотра через gulp для получения одного минимизированного js.
Я переключился с загрузки зависимостей вручную и обновления вручную на установку их с помощью npm.

Все прошло гладко, но когда я захотел установить select2, он начал выдавать ошибки повсюду. Когда я переместил удаленный вручную обновленный файл для файла npm required().

jquery.js: 3841 jQuery.Deferred исключение: o (...). Select2 не является функцией TypeError: o (...). Select2 не является функцией
в i.init (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:5612)
в i.sysInit (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108153)
в i (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:106602)
на новом я (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:5333)
на HTMLSelectElement. (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108496)
на Function.each (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:200628)
на _.fn.init.each (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:199273)
в _.fn.init.d.fn. (анонимная функция) [как FormDropdownHandler] (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108384)
на HTMLDocument. (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108696)
в HTMLDocument.dispatch (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:240241) не определено

dropdown.module.js: 53 Uncaught TypeError: o (...). Select2 не является функцией
в i.init (dropdown.module.js: 53)
в i.sysInit (oc.foundation.base.js: 157)
в i (oc.foundation.base.js: 20)
на новом я (dropdown.module.js: 19)
на HTMLSelectElement. (oc.foundation.base.js: 191)
в Function.each (jquery.js: 367)
на _.fn.init.each (jquery.js: 202)
в _.fn.init.d.fn. (/ анонимная функция) [как FormDropdownHandler] (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108384)
на HTMLDocument. (oc.foundation.base.js: 213)
в HTMLDocument.dispatch (jquery.js: 5237)

Код, который я использую:

<select name="pickup_point">
    <option value="1" >all work</option>
    <option value="4" >no play</option>
    <option value="5" >dull boy</option>
</select>

и JavaScript:

$ = require('jquery');
require('select2');
$(document).ready(function(){
    $('select').select2();
});

Как заставить работать select2, когда мне это требуется в файле index.js?

1 Ответ

0 голосов
/ 05 июня 2019

Мне потребовалось время, чтобы собрать воедино то, что здесь не так.

Дело в том, что Select2 использует свой собственный загрузчик и заводскую функцию для инициализации, которая не вызывается по умолчанию. Вам нужно позвонить вручную.

Если у вас есть объект окна и вы зарегистрировали jQuery для объекта окна, вы можете вызвать Select2 следующим образом один раз в своем основном файле JavaScript:

window.$ = window.jQuery = require('jquery);
require('select2')();

или если вы предпочитаете переменные вместо вызова функции require, то:

window.$ = window.jQuery = require('jquery);
var select2Initialisator = require('select2');
select2Initialisator();

Если вам нравится работать с областями действия или другими версиями jQuery, вы также можете передать экземпляр jQuery, в котором вы хотите зарегистрировать select2, в конструктор фабрики select2 следующим образом

 var jQuery = require('jquery');
 require('select2')(jQuery);
...