Rails & Webpack:如何调用应用包中的函数?
Rails & Webpack: How do I call functions in application pack?
我似乎无法弄清楚如何使用 Webpacker 调用 Rails 6 中的函数。如果在控制台中调用它们,我会收到该函数未定义的消息。
我怎样才能调用这些函数?还是我不应该这样做的充分理由?
问题的最简单形式:
在 application.js 我有一个函数叫做 something.
# app/javascripts/packs/application.js
function something() {
console.log("something")
}
$(document).on("turbolinks:load", something())
# console
something
但是当我在带有 onClick() 的 link 中或在 *.js.erb 文件中使用它时,或者只是将函数放在控制台中时,我得到错误 ReferenceError: something is not defined
该函数确实出现在我的 Webpacker 编译的 application.js 文件中
我的 webpack 设置如下:(我只调整了 webpack 配置以包括 jQuery 和 popper.js)
# config/webpack/environment.js
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
jquery: 'jquery',
Popper: ['popper.js', 'default'],
ActionCable: 'actioncable',
})
)
const config = environment.toWebpackConfig()
config.resolve.alias = {
jquery: "jquery/src/jquery",
}
module.exports = environment
问题是 webpack 没有公开这些函数。
为了能够从 *.js.erb
文件调用它们,您需要在 window.
上定义它们
# app/javascripts/packs/application.js
function something() {
console.log("something")
}
window.app.something
在你的*.js.erb
window.app.something();
我似乎无法弄清楚如何使用 Webpacker 调用 Rails 6 中的函数。如果在控制台中调用它们,我会收到该函数未定义的消息。 我怎样才能调用这些函数?还是我不应该这样做的充分理由?
问题的最简单形式: 在 application.js 我有一个函数叫做 something.
# app/javascripts/packs/application.js
function something() {
console.log("something")
}
$(document).on("turbolinks:load", something())
# console
something
但是当我在带有 onClick() 的 link 中或在 *.js.erb 文件中使用它时,或者只是将函数放在控制台中时,我得到错误 ReferenceError: something is not defined
该函数确实出现在我的 Webpacker 编译的 application.js 文件中
我的 webpack 设置如下:(我只调整了 webpack 配置以包括 jQuery 和 popper.js)
# config/webpack/environment.js
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
jquery: 'jquery',
Popper: ['popper.js', 'default'],
ActionCable: 'actioncable',
})
)
const config = environment.toWebpackConfig()
config.resolve.alias = {
jquery: "jquery/src/jquery",
}
module.exports = environment
问题是 webpack 没有公开这些函数。
为了能够从 *.js.erb
文件调用它们,您需要在 window.
# app/javascripts/packs/application.js
function something() {
console.log("something")
}
window.app.something
在你的*.js.erb
window.app.something();