Search code examples
javascriptruby-on-railsturbolinks

Is there a DRY way to call multiple function() on turbolinks:load?


If we have:

#app/assets/javascripts/tabbed_panels.js
var new_items = function() {
 #do something
});

$(document).on("turbolinks:load", new_items);

and

#app/assets/javascripts/paginate_users.js
var new_users = function() {
 #do something
});

$(document).on("turbolinks:load", new_users);

etc

Is there a way to avoid repeating $(document).on("turbolinks:load", '#'); for every script?


Solution

  • I don't think queuing multiple functions for the same event is a bad pattern or violates DRY principles, but you could encapsulate the behavior in a single function to avoid having your various modules know about the load behavior of Turbolinks:

    var initialize = function(callback) {
      $(document).on('turbolinks:load', callback);
    }
    
    # later...
    initialize(new_users);