切勿使用 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_url
和 ROUTE_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
我知道我可以使用 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_url
和 ROUTE_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