如果在某些页面上运行脚本 - rails

Dyl*_*tle 1 javascript if-statement controller ruby-on-rails

在每个页面加载上运行if语句来检查我是否应该运行脚本是不是一个坏主意.例如,我有一个非常长的javascript文件,只需要在使用表单时运行.但是目前在我的每个文件中我都包含了document.addEventListener("turbolinks:load", function()这意味着它会在每个页面加载时运行.

在我的脚本中,我很想在文件的开头写一个if语句,如下所示:

document.addEventListener("turbolinks:load", function() {
  controller = $('body').data('controller')
  action = $('body').data('action')
  if controller == foo && action == bar 
    runScripts();
  else
    return;
  function runscripts() {
    ...
Run Code Online (Sandbox Code Playgroud)

我仍然有点使用带有rails的javascript,所以我不知道另一种方式.有什么建议?

Raj*_*hra 7

您可以使用控制器操作名称来确定布局的body元素的范围.

<body class="<%= controller_name %> <%= action_name %>">
  <%= yield %>
</body>
Run Code Online (Sandbox Code Playgroud)

现在通过使用我们添加到布局主体的类,我们可以限制页面的某些功能.

$(document).on("turbolinks:load", function() {
  if (!($(".foo.bar").length > 0)) {
    return;
  }
  //--- page specific js code after above condition ---
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,较小的条件可以防止在不应该的页面上触发页面特定的行为.

为了更清楚,请阅读此内容