【发布时间】:2019-07-12 11:36:31
【问题描述】:
刚刚将我的 Rails 应用程序中的 js 管道替换为 webpacker。
大多数事情都能正常工作,但是渲染 js 的控制器不再按预期工作。
def action
format.js { render "javascript_partial" }
end
通常,如果在render 中未指定,上述内容将在我的视图中执行一个名为javascript_partial.js.erb 或action.js.erb 的文件。
问题似乎是这些文件与webpacker 管道没有连接,因此无法访问像jquery 这样的全局库或显式管理它们自己的imports。
此代码现在会导致客户端语法错误,因为它无法访问 jquery $ 函数:
$("#element").html(<= j render partial: 'partial', locals: { object: @object } %>
在我看来,内联 js 存在相关问题。类似于以下内容,
<%= form.collection_select ... onchange: 'Rails.fire(this.form, "submit")' %>
不再起作用,因为内联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 ...
});
上面的工作非常好,并且可以访问jquery,因为我已经将它导出到config/webpack/environment.js,
environment.plugins.append('Provide', new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
jquery: 'jQuery'
}));
【问题讨论】:
标签: javascript ruby-on-rails webpack ecmascript-6 erb