Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用TurboLink刷新页面_Ruby On Rails_Ruby_Turbolinks - Fatal编程技术网

Ruby on rails 如何使用TurboLink刷新页面

Ruby on rails 如何使用TurboLink刷新页面,ruby-on-rails,ruby,turbolinks,Ruby On Rails,Ruby,Turbolinks,我知道我可以调用下面的代码,但它会更改滚动位置。有没有办法调用TurboLink来刷新页面而不更改滚动位置 Turbolinks.visit(location.toString()); 这将满足我的要求,但我希望使用TurboLink window.location.reload() 这是有益的一段时间,不知道你是否仍然需要一个解决方案。您可以尝试在加载页面内容之前和之后禁用/启用滚动: Turbolinks.enableTransitionCache(true); Turbolinks.

我知道我可以调用下面的代码,但它会更改滚动位置。有没有办法调用TurboLink来刷新页面而不更改滚动位置

Turbolinks.visit(location.toString());
这将满足我的要求,但我希望使用TurboLink

 window.location.reload()

这是有益的一段时间,不知道你是否仍然需要一个解决方案。您可以尝试在加载页面内容之前和之后禁用/启用滚动:

Turbolinks.enableTransitionCache(true);
Turbolinks.visit(location.toString());
Turbolinks.enableTransitionCache(false);

在调用
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">

我的答案基于,在重新加载后恢复焦点,并在渲染前获得滚动位置


在呈现新页面之前存储当前滚动位置和活动字段项,然后在呈现后,滚动到存储的位置并恢复焦点。将存储的滚动位置和焦点ID重置为null可确保后续页面加载不会滚动到旧位置/焦点

请注意,这些字段必须分配ID才能恢复焦点

var reloadWithTurbolinks = (function () {
        var scrollPosition;
        var focusId;

        function reload() {
            Turbolinks.visit(window.location.toString(), {action: 'replace'})
        }

        document.addEventListener('turbolinks:before-render', function () {
            scrollPosition = [window.scrollX, window.scrollY];
            focusId = document.activeElement.id;
        });
        document.addEventListener('turbolinks:load', function () {
            if (scrollPosition) {
                window.scrollTo.apply(window, scrollPosition);
                scrollPosition = null
            }
            if (focusId) {
                document.getElementById(focusId).focus();
                focusId = null;
            }
        });
        return reload;
    })();
然后你可以这样称呼它:

 setInterval(function () {
        reloadWithTurbolinks();
 }, 3000);
我将其与表单上的“data turbolinks permanent”属性相结合。我也使用