切勿使用 Turbolinks 加载特定路线

Never use Turbolinks to load a specific route

我知道我可以使用 data-no-turbolink 属性来确保 link(或许多 links)不使用 turbolinks,但是有什么方法可以确保 某个特定页面永远不会通过 turbolinks 加载?

我有一个特定的页面在通过 turbolinks 加载时损坏了,我不想使用一些 hack 来解决这个问题,而是希望这个页面总是以通常的方式加载。

我知道我可以将 data-no-turbolink 添加到所有转到此页面的 link,但我必须记住对此页面的每个后续 link 执行此操作,这很老套。

有没有更好的方法?

您可以将以下代码添加到应用程序的帮助程序文件中。它将检查页面上调用的控制器和操作,然后 return 如果匹配 HTML 属性。

# application_helper.rb
def no_turbolinks
  "data-no-turbolinks='true'".html_safe if controller_name == "your_controller" && action_name == "your_action"
end

然后,在您应用程序的 HTML:

<body <%= no_turbolinks %>>

理想情况下,这只会加载到您想要的特定页面;为那个页面禁用 turbolinks。

要修改所有新的和现有的 URL 以删除特定 URL 的 turbolinks,请阅读以下内容:

由于您希望在通过 link_to 链接到特定页面时始终使用 "data-no-turbolinks",您可以修改方法以检查其目标的 URL 并设置data-no-turbolinks 属性。

修改 link_to 助手(确保用您的路线中的正确变量替换 ROUTE_urlROUTE_path

# application_helper.rb
def link_to(name, path, options = {})
  no_turbolink_routes = [ROUTE_url, ROUTE_path]  # Add URLs/PATHs here

  if no_turbolink_routes.include? path
    options['data-no-turbolinks'] = 'true'
  end

  super(name, path, options)
end