Turbolinks.enableTransitionCache不是函数

时间:2017-06-02 15:09:27

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

我正在尝试使用turbolinks 5在rails 5.1 app中执行以下操作:

$(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不是函数。 (在   'Turbolinks.enableTransitionCache()',   'Turbolinks.enableTransitionCache'未定义)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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结构如何,就很难为此编写代码,但这可能值得考虑。