Turbolinks.enableTransitionCache 不是函数
Turbolinks.enableTransitionCache is not a function
我正在尝试在 rails 5.1 应用中使用 turbolinks 5 执行以下操作:
$(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
请注意,当页面 "unloads" 时计时器会被清除,因此如果用户以给定的时间间隔导航到另一个页面,则不会重新加载该页面。
或者,您可能希望仅通过 AJAX 和 js.erb 更新需要它的页面部分,而不是重新加载正文。如果不更多地了解您要实现的目标以及您的 HTML 的结构,很难为此编写代码,但这可能值得考虑。
我正在尝试在 rails 5.1 应用中使用 turbolinks 5 执行以下操作:
$(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
请注意,当页面 "unloads" 时计时器会被清除,因此如果用户以给定的时间间隔导航到另一个页面,则不会重新加载该页面。
或者,您可能希望仅通过 AJAX 和 js.erb 更新需要它的页面部分,而不是重新加载正文。如果不更多地了解您要实现的目标以及您的 HTML 的结构,很难为此编写代码,但这可能值得考虑。