如果在特定页面上运行脚本 - rails

时间:2017-03-30 02:18:57

标签: javascript ruby-on-rails if-statement controller

在每个页面加载上运行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() {
    ...

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

1 个答案:

答案 0 :(得分:7)

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

<body class="<%= controller_name %> <%= action_name %>">
  <%= yield %>
</body>

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

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

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

为了更加清晰,请阅读this