3

Would it be a bad idea to run an if statement on each page load to check whether or not I should run a script. For example I have a really long javascript file that only needs to be run when using forms. But currently in each of my files I have included the document.addEventListener("turbolinks:load", function() which means it runs on every page load.

In my script I am tempted to write an if statement at the beginning of the file like so:

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

I'm still somewhat new to using javascript with rails so I don't know of another way. Any suggestions?

1 Answer 1

9

You can scope the body element of the layout with the controller and action name.

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

Now by using the classes we added to the body of the layout, we can limit the pages certain functionality.

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

In this case, a small condition can prevent the page specific behaviour being triggered on pages it shouldn’t be.

For more clarity read this

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.