turbolinks手动更改网址

时间:2013-11-14 16:59:40

标签: ruby-on-rails turbolinks

我在rails 4应用程序中使用无限滚动。

滚动列表时,代码会自动更新网址:

var loading = false;
$(function() {
  function nearBottomOfPage() {
    return $(window).scrollTop() > $(document).height() - $(window).height() - 200;
  }
  $(window).scroll(function(){
    if (loading || $(".infinite-scroll").length == 0) {
      return;
    }

    if(nearBottomOfPage()) {
      loading=true;
      var qstring = parseInt(getParameterByName('page'));
      if(isNaN(qstring)) {qstring = 1;}
      qstring++
      updateQueryString('page',qstring);
      var url = $(".infinite-scroll").data("update-url")
      var q_string = window.location.search
      if(url.indexOf("?") != -1) {
          q_string = q_string.replace("?","&")
      }
      url = url + q_string
      $.ajax({
        url: url,
        type: 'get',
        dataType: 'script',
        success: function() {
          $(window).sausage('draw');
          loading=false;
        }
      });
    }
  });
  $(window).sausage();
});

updateQuerystring函数替换状态如下:

window.history.replaceState({turbolinks: true, position: Date.now()}, document.title, new_url);

这是一个试图获得在rails 3中工作的东西在rails 4中工作的黑客......

它似乎有用,但它不干净并且有一些问题。

主要问题是不提醒滚动位置。单击后退按钮时,我会回到页面顶部。

有没有办法做到这一点清洁。理想情况下,而不是做window.history.replaceState我想做Turbolinks.replaceState(newUrl)或类似的东西。

但如果我能找到一种方法来记住滚动位置,那就已经很棒了。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

手动触发Turbolinks访问

     

您可以使用Turbolinks.visit(路径)通过Turbolinks转到URL。

https://github.com/rails/turbolinks#triggering-a-turbolinks-visit-manually