【问题标题】:Never use Turbolinks to load a specific route切勿使用 Turbolinks 加载特定路线
【发布时间】:2015-07-15 00:31:57
【问题描述】:

我知道我可以使用data-no-turbolink 属性来确保一个链接(或许多链接)不使用turbolinks,但是有没有办法确保一个特定的页面永远不会通过turbolinks 加载

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

我知道我可以将data-no-turbolink 添加到指向此页面的所有链接,但是我必须记住对指向此页面的每个后续链接都这样做,这非常hacky。

有没有更好的办法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 turbolinks


    【解决方案1】:

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

    由于您希望在通过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
    

    【讨论】:

    • 是的,我已经找到了同样的解决方案,所以我将其标记为正确。我要注意的是,由于link_to 有一些“签名”,我的代码可能会有点脆弱,并且与link_to 的实现有关。另一方面,我不指望 Rails 团队很快就会破坏这种关键方法的向后兼容性,所以也许我是安全的。无论哪种方式,解决方案都有点破解,我希望 turbolinks 提供更好的方法......
    • 理想情况下,您应该创建一个自定义的 link_to 方法 (my_link_to),但是,由于您已经提到您不想浏览所有文件并对其进行编辑,因此覆盖您的 link_to 方法是最好的选择。
    【解决方案2】:

    您可以将以下代码添加到应用程序的帮助文件中。它将检查页面上调用的控制器和操作,如果匹配则返回 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 %>>
    

    理想情况下,这只会加载到您想要的特定页面上;禁用该页面的 turbolink。

    【讨论】:

    • 不,我不相信这能达到我想要的效果。这将使该页面的所有链接不使用turbolinks,而我希望该页面的所有链接不使用turbolinks。
    • 啊哈,有趣的小区别。我现在明白你的意思了。我会更新我的答案以反映
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多