Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails的多个html.erb文件中包含相同的js文件_Ruby On Rails - Fatal编程技术网

Ruby on rails 在Rails的多个html.erb文件中包含相同的js文件

Ruby on rails 在Rails的多个html.erb文件中包含相同的js文件,ruby-on-rails,Ruby On Rails,一个html.erb中包含的javascript文件是否即使在另一个具有不同url的视图中也是持久的?例如:假设流程是,如果我在new中单击Go按钮,那么用户被引导到show页面,并且我只在new.html.erb中包含js文件,那么js文件在show中也可用吗 new.html.erb _first_partial.html.erb _second_partial.html.erb 在这里,对于if和elsif条件,我只渲染其中一个部分,这样我就可以在任何部分中包含js文件,但是对于第三个el

一个html.erb中包含的javascript文件是否即使在另一个具有不同url的视图中也是持久的?例如:假设流程是,如果我在new中单击Go按钮,那么用户被引导到show页面,并且我只在new.html.erb中包含js文件,那么js文件在show中也可用吗

new.html.erb

_first_partial.html.erb

_second_partial.html.erb


在这里,对于if和elsif条件,我只渲染其中一个部分,这样我就可以在任何部分中包含js文件,但是对于第三个else条件,由于两个部分都已渲染,那么包含js文件的最佳方式是什么?而且我不能在main中包含js文件,因为js文件是在呈现部分中的html之后调用的。

不,通常javascript代码在其他视图中不可用,只在包含它的视图中可用。所以你需要再次包含它

例外情况是,如果您将它放在布局文件(如application.html.erb)中,因为它将在所有视图中呈现

如果在两个部分中都调用javascript包,那么也可以在If语句之后在main中调用它。这将在部分加载后加载。在一个文件中需要一段javascript,而这个文件似乎没有JS文件中使用的html元素,这可能看起来很奇怪,但是,片段只是在rails中组织代码的一种方式。最后,它们将合并成一个大的html文件

在您的评论中,您说这个if语句嵌套在另一个if语句中,所以您可能根本不需要javascript?将其粘贴到if语句的末尾,如下所示

<% if outer_if_statment %>
  <% if some_condition %>
    <% render partial: 'first_partial' %>
  <% elsif some_other_condition %>
    <% render partial: 'second_partial' %>
  <% else %>
    <% render partial: 'first_partial' %>
    <% render partial: 'second_partial' %>
  <% end %>
  <%= javascript_include_tag 'common' %>
<% else %>
...
<% end %>
在视图中,您可以这样称呼它:

<%= content_for :after_js do %>
  <%= javascript_include_tag 'common' %>
<% end %>

谢谢你的回答。我已经编辑了我的问题。请把问题通读一遍。您的回答对于我的问题的上一个版本是正确的,但是我的编辑上载得太晚了。所以你已经回答了上一个版本。我编辑了我的答案-为什么你认为你不能在主文件中加载它?主文件还有其他代码。我只为这个问题粘贴了必要的内容。问题中的if条件位于另一个if块内。因此,当主文件中的其他条件不满足时,js文件是不必要的。所以我不包括它,而且js只在那些部分中的html元素上有函数。基本上我想问的是,如果同一个父html.erb文件中的两个部分或者父html.erb文件中的一个部分需要相同的js文件,那么包含js文件的最佳方式是什么。我想我的问题并不完全清楚。我得到了一个问题:答案是,你可以把它放在主文件中,即使这看起来有点奇怪。但请记住,部分内容将全部合并到一个大的html文件中。我会更新我的answer@Clara我已经打开了另一个问题,在这里我已经更清楚地提出了疑问——请也检查一下这个问题。
#some code
<%= javascript_include_tag 'common' %>
#some code
<%= javascript_include_tag 'common' %>
<% if outer_if_statment %>
  <% if some_condition %>
    <% render partial: 'first_partial' %>
  <% elsif some_other_condition %>
    <% render partial: 'second_partial' %>
  <% else %>
    <% render partial: 'first_partial' %>
    <% render partial: 'second_partial' %>
  <% end %>
  <%= javascript_include_tag 'common' %>
<% else %>
...
<% end %>
 <body>
    <%= yield %>
    <%= javascript_include_tag 'application' %>
    <%= javascript_pack_tag 'application' %>

    <%= yield(:after_js) %>
</body>
<%= content_for :after_js do %>
  <%= javascript_include_tag 'common' %>
<% end %>
// common.js
const button = document.querySelector("#red-button")
if (button) {
  button.addEventListener(...)
}