【问题标题】:Is there a DRY way to call multiple function() on turbolinks:load?是否有一种 DRY 方法可以在 turbolinks:load 上调用多个函数()?
【发布时间】:2023-08-23 20:23:01
【问题描述】:

如果我们有:

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

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

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

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

有没有办法避免为每个脚本重复$(document).on("turbolinks:load", '#');

【问题讨论】:

    标签: javascript ruby-on-rails turbolinks


    【解决方案1】:

    我不认为为同一事件排队多个函数是一种不好的模式或违反 DRY 原则,但您可以将行为封装在一个函数中以避免让您的各个模块知道 Turbolinks 的加载行为:

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

    【讨论】:

    • 谢谢。你知道有没有办法我可以用 ruby​​ 方法做这样的事情,这样我就可以在我的 <%= link_to ... %> *.com/questions/41336325/… 中干掉所有的 data: {turbolinks: false}
    • @TimmyVonHeiss 理想情况下,您不会做太多/任何事情,但您始终可以覆盖 link_to 或创建一个单独的帮助器来包装 link_to 或其 options 参数(例如 @ 987654328@ 你在别处定义了default_link_options)。
    • 当页面通过link_to 打开时,我的 jquery 脚本似乎很少能正常工作,除非我有data: {turbolinks: false}
    • @TimmyVonHeiss 您的 JS 是否在正文中包含标签?如果是这样,那可能就是给您带来问题的原因。
    • fwiw,我发现我认为是 turbolinks 问题实际上是与滚动脚本相关的问题,该脚本对我编写的新页面进行分页.. 它正在转移到其他页面。我修好了它。它与 turbolink 无关。
    最近更新 更多