我需要包含 bootstrap 4,使其在所有包含的 javascript 文件中都可见。实际上,有一个 app.js 文件,其中连接了引导程序:
const $ = require('jquery');
global.$ = global.jQuery = $;
require('bootstrap');
它是用 webpack 编写的,在我需要的 html 文件中调用:
{{ encore_entry_link_tags('app') }}
Bootstrap 启动,所有组件都工作,甚至插件(如 Modal、Tooltip 等),但仅限于 INSIDE app.js。我需要让这些插件对其他 JavaScript 文件可见。
我试图在我需要的文件中单独连接必要的插件:
require('bootstrap/js/dist/tooltip');
require('bootstrap/js/dist/modal');
但是通过这种方式,与这些组件相关的所有功能都开始工作两次,这看起来很不愉快,有时甚至很烦人。如何包含引导程序,以便组件的功能不重复并且在所有 JS 文件中可见?
这是 Tooltip 插件示例的错误:
jQuery.Deferred exception: $(...).tooltip is not a function TypeError: $(...).tooltip is not a function
at HTMLDocument.<anonymous> (https://192.168.117.39:8000/build/aboninfo.f622ec28.js:225:45)
at mightThrow (https://192.168.117.39:8000/build/aboninfo.f622ec28.js:5833:29)
at process (https://192.168.117.39:8000/build/aboninfo.f622ec28.js:5901:12) undefined
模态窗口事件(模态插件)根本不触发,也没有反应:
$("#inetSessionListModal").on('show.bs.modal', function(e) {
...
});
在 Webpack 中包含文件:
.addEntry('app', './assets/js/app.js')
.addEntry('aboninfo', './assets/js/aboninfo.js')
在模板本身中:
{% block javascripts %}
{{ parent() }} // Здесь подключается app.js
{{ encore_entry_script_tags('aboninfo') }}
{% endblock %}
我通过在所需文件中写入以下内容解决了我的问题:
之后,所有附加到 jQuery 的事件都被提取到我需要的文件中。