据我所知,我可以在
Turbolinks 5上调用以下代码,但它会更改滚动位置.有没有办法调用Turbolinks来刷新页面而不是更改滚动位置?
- Turbolinks.visit(location.toString());
这将做我想要的,但希望使用Turbolinks
- window.location.reload()
解决方法
在调用visit之前存储当前滚动位置,然后在页面加载时滚动到该存储位置.将存储的滚动位置重置为null可确保后续页面加载不会滚动到旧位置.一种可能的实现可能是:
- var reloadWithTurbolinks = (function () {
- var scrollPosition
- function reload () {
- scrollPosition = [window.scrollX,window.scrollY]
- Turbolinks.visit(window.location.toString(),{ action: 'replace' })
- }
- document.addEventListener('turbolinks:load',function () {
- if (scrollPosition) {
- window.scrollTo.apply(window,scrollPosition)
- scrollPosition = null
- }
- })
- return reload
- })()
然后你可以调用reloadWithTurbolinks().
要防止页面从顶部滚动到所需位置时闪烁,请在页面头部添加无预览缓存指令:
- <Meta name="turbolinks-cache-control" content="no-preview">