sam*_*ker 10 javascript ruby-on-rails erb ecmascript-6 webpack
刚用替换了Rails应用程序中的js管道webpacker。
大多数事情都能正常工作,但是呈现js的控制器不再能按预期工作。
def action
format.js { render "javascript_partial" }
end
Run Code Online (Sandbox Code Playgroud)
通常,上面的代码会在我的视图中执行一个文件,javascript_partial.js.erb或者action.js.erb在中未指定的话render。
问题似乎是这些文件没有与webpacker管道的连接,因此无法访问类似的全局库jquery或无法对其进行显式管理imports。
现在,此代码会导致客户端语法错误,因为它无法访问jquery $函数:
$("#element").html(<= j render partial: 'partial', locals: { object: @object } %>
Run Code Online (Sandbox Code Playgroud)
我认为行内js有一个相关问题。类似以下内容
<%= form.collection_select ... onchange: 'Rails.fire(this.form, "submit")' %>
Run Code Online (Sandbox Code Playgroud)
不再起作用,因为内联js无法访问诸如之类的全局对象Rails。
这似乎是一个简单的问题,但是我在任何地方都找不到文档。
有谁能使webpacker与历史上预期的Rails / js行为保持一致?我需要带回来sprockets吗?
如果有帮助,我的javascript/packs/application.js文件看起来像这样,
import Rails from 'rails-ujs';
import Turbolinks from 'turbolinks';
Rails.start();
Turbolinks.start();
$(document).on("turbolinks:load", () => {
// initial setup ...
});
Run Code Online (Sandbox Code Playgroud)
上面的方法工作得很好,并且可以访问,jquery因为我已将其导出到中config/webpack/environment.js,
environment.plugins.append('Provide', new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
jquery: 'jQuery'
}));
Run Code Online (Sandbox Code Playgroud)
sam*_*ker 10
通过这篇精彩的文章弄清楚了!
使用expose-loader暴露关键库香草JavaScript整个应用洒。
1)安装依赖项
yarn add expose-loader --dev
Run Code Online (Sandbox Code Playgroud)
2)配置config/webpack/environment.js,
const { environment } = require('@rails/webpacker');
environment.config.merge({
module: {
rules: [
{
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: '$'
}, {
loader: 'expose-loader',
options: 'jQuery'
}]
},
{
test: require.resolve('rails-ujs'),
use: [{
loader: 'expose-loader',
options: 'Rails'
}]
}
]
}
});
module.exports = environment;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |