刚刚将我的rails应用程序中的js管道替换为
webpacker
.
大多数事情都正常工作,但是呈现js的控制器不再像预期的那样工作。
def action
format.js { render "javascript_partial" }
end
通常,上面会在我的视图中执行一个名为
javascript_partial.js.erb
或
action.js.erb
如果未在中指定
render
.
问题似乎是这些文件与
韦伯包装公司
因此无法访问全局库,如
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'
}));