ruby-on-rails - Turbolinks.enableTransitionCache 不是一个函数

标签 ruby-on-rails ruby-on-rails-5 turbolinks turbolinks-5

我正在尝试使用 Turbolinks 5 在 Rails 5.1 应用程序中执行以下操作:

$(document).on 'turbolinks:load', ->
  REFRESH_INTERVAL_IN_MILLIS = 5000
  if $('.f-pending-message').length > 0
    setTimeout (->
      Turbolinks.enableTransitionCache(true)
      Turbolinks.visit location.toString()
      Turbolinks.enableTransitionCache(false)
      return
    ), REFRESH_INTERVAL_IN_MILLIS

但我不断得到:

TypeError: Turbolinks.enableTransitionCache is not a function. (In 'Turbolinks.enableTransitionCache()', 'Turbolinks.enableTransitionCache' is undefined)

我做错了什么?

最佳答案

enableTransitionCache 功能仅在旧版本的 Turbolinks 中可用。它在 Turbolinks 5 中不可用:(

目前 Turbolinks 没有刷新页面主体(并​​保持滚动位置)的方法,因此您必须创建自己的方法。

我已在 How to refresh a page with Turbolinks 中对此进行了介绍。基本上,在重新访问当前页面之前存储滚动位置,然后在页面加载时恢复到该位置。在您使用 jQuery/coffeescript 的情况下:

REFRESH_INTERVAL_IN_MILLIS = 5000
timerID = null
scrollPosition = null

reload = ->
  scrollPosition = [window.scrollX, window.scrollY]
  Turbolinks.visit window.location.toString(), action: 'replace'

$(document).on 'turbolinks:load', ->
  if scrollPosition
    window.scrollTo.apply window, scrollPosition
    scrollPosition = null

  if $('.f-pending-message').length > 0
    timerID = window.setTimeout(reload, REFRESH_INTERVAL_IN_MILLIS)

$(document).on 'turbolinks:before-cache turbolinks:before-render', ->
  window.clearTimeout timerID

请注意,当页面“卸载”时,计时器会被清除,这样,如果用户以给定的时间间隔导航到另一个页面,则页面不会重新加载。

或者,您可能希望仅通过 AJAX 和 js.erb 更新页面中需要它的部分,而不是重新加载正文。如果不进一步了解您要实现的目标以及 HTML 的结构,就很难为此编写代码,但这可能值得考虑。

关于ruby-on-rails - Turbolinks.enableTransitionCache 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44332126/

相关文章:

javascript - Rails node_modules 冗余文件

ruby-on-rails - 带变量的 Rail 4 image_tag

ruby-on-rails - 使用载波图像作为 CSS 背景图像的 Turbolinks

javascript - 删除后的涡轮链接/重定向

ruby-on-rails - 如何用ruby写一个爬虫?

ruby-on-rails - 如何选择具有多于 n 个子记录的所有记录

ruby-on-rails - Rails 本地主机不工作

ruby-on-rails - 错误 : heartbeat: Connection lost (ECONNRESET) in sidekiq

ruby-on-rails - rails : How to implement protect_from_forgery in Rails API mode

javascript - 使用 Turbolinks 定期重新加载 Rails 4 中的页面