Zac*_*ack 6 javascript ruby-on-rails import-maps ruby-on-rails-7
当使用带有导入映射的 Rails 7 时,我应该在哪里放置只应由一个视图执行的代码?
具体来说,我有一个需要在加载时运行一些 Javascript 代码的视图。我的 JavaScript 看起来像这样:
import {TheController} from "./TheController"
let controller = new TheController();
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
controller.onLoad();
}
};
Run Code Online (Sandbox Code Playgroud)
如何设置 Javascript 环境以便document.onreadystatechange代码仅由所需的视图执行?(当我将此代码放入由 导入的文件中时,一切几乎都能正常工作,但随后它会被每个application.js视图执行。)
我怀疑答案是创建单独的 importmaps 和 importmap_tags;但是,我可以在 Rails 7 中找到有关如何执行此操作的任何演示。
Zac*_*ack 16
正如@Azrklm 指出的那样,答案包含在这段视频https://youtu.be/PtxZvFnL2i0?t=1287从时间 21:38 开始。
假设我们有一些 JavaScript,我们只想在名为 的视图上运行FancyView。以下是步骤
例如,将 唯一的代码放入FancyView其自己的文件中FancyView.js(如果需要,可将其从 中删除application.js)。
FancyView.js在导入映射中 添加一行:pin "FancyView"
添加行<%= yield :head %> to application.html.erb`。(这告诉 Rails,各个视图/布局可能想要向网页的头部添加附加信息。)
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %> <%# This loads application.js %>
<%= yield :head %>
Run Code Online (Sandbox Code Playgroud)
添加一个javascript_import_module_tag到视图:
<% content_for :head do %>
<%= javascript_import_module_tag "FancyView" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3564 次 |
| 最近记录: |