【发布时间】:2021-01-30 23:16:28
【问题描述】:
说明
我注意到在使用 JavaScript 文件(例如 app/javascript/packs/custom.js)时,像 shown.bs.modal 这样的引导 jquery 事件不起作用。我想为不同的页面使用不同的 js 文件,但是由于一些意外行为,它不能很好地与 Bootstrap js 函数一起使用。我认为我在安装应用时遗漏了导致此问题的某些内容。
环境
jQuery 和 Bootstrap 安装者为:yarn add bootstrap@4.3.1 jquery popper.js
- Rails 版本:6.0.3.4
- 引导版本:4.3.1
- jQuery 版本:3.5.1
config/webpack/environment.js
...
const webpack = require('webpack')
environment.plugins.append(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
Popper: ['popper.js', 'default']
})
)
...
app/javascript/packs/application.js
...
import 'jquery'
import 'bootstrap'
import '../stylesheets/application.scss'
app/javascript/stylesheets/application.scss
@import "bootstrap";
app/javascript/packs/custom.js
ready = function() {
console.log('document loaded');
$('.btn').on('click', function() {
console.log('a button was pressed');
});
$('#testModal').on('shown.bs.modal', function() {
console.log('testModal shown');
});
}
$(document).ready(ready);
实际行为
在页面中,Bootstrap 样式正常工作,模态显示正常,但我只能在控制台上看到“已加载文档”和“按下按钮”打印。检查 Webpacker 为 custom.js 生成的 JavaScript 文件,我发现它再次包含 jQuery。有了这个,我假设 Bootstrap js 函数被覆盖了。
预期行为
shown.bs.modal等Bootstrap事件回调被调用,Webpack不再为外部js文件包含jQuery。
【问题讨论】:
标签: javascript jquery ruby-on-rails twitter-bootstrap webpack