webpack Rails 6 -在某些控制器操作中需要JS文件

uklbhaso  于 2022-11-13  发布在  Webpack
关注(0)|答案(2)|浏览(135)

我目前正在尝试Rails 6.0.0,它似乎已经将默认的javascript文件夹从app/assets/javascript移动到app/javascriptapplication.js文件现在位于app/javascript/packs
现在,我想为每个控制器动作添加JS文件。例如,我有:

  • UsersController#index
  • UsersController#show
  • UsersController#edit

在一些控制器动作上,我需要添加一些javascript:

  • app/javascript/user/index.js
  • app/javascript/user/show.js
  • app/javascript/user/edit.js
  • app/javascript/user/form.js(假设在表单中我需要一些js调整)

这是我目前正在做的事情。在控制器视图中:

<%= javascript_pack_tag 'user/index', 'data-turbolinks-track': 'reload' %>

然而,在index.js中,我不能调用application.js中所需的库。

require("bootstrap/dist/js/bootstrap")

在index.js中,我调用bootstrap特定的JS,用于弹出窗口、模态......我得到:

Uncaught TypeError: $(...).modal is not a function

我不想把所有的JS都写在application.js中,因为每个页面都要加载整个网站的JS,这太疯狂了!这就是为什么我想把它们分开,在我需要的时候包括进去。
另外,为什么我们必须在application.js中要求JS文件?如果我们使用javascript_pack_tag,我们是否需要在application.js中要求这些文件?
这是我刚刚创建的一个dummy存储库。
参考:here解释了如何要求自定义JS文件。

tp5buhyn

tp5buhyn1#

添加到您的application.html.erb

<%= javascript_pack_tag controller_name %> for controllers <br/>
<%= javascript_pack_tag action_name %> for actions
u7up0aaq

u7up0aaq2#

您可以创建一个文件夹结构作为您的视图。因此,假设您有一些自定义表单验证要添加到用户的编辑视图中。您有以下结构:app/views/users/edit.html.erb
edit.html.erb中,删除所有JS代码并删除script标记,而是添加:

<%= javascript_pack_tag('user/edit') %>

打开app/javascript/packs文件夹,创建与编辑视图相同的文件夹结构,如下所示:app/javascript/packs/product/edit.js .
内部edit.js

window.onload = function () {
  // Your custom form validation JS code for users/edit
}

打开config/application.rb,在模块内部:

config.assets.precompile += ['user/edit.js']
# Keep appending more assets as you wish.

相关问题