2

Rails 4 アプリケーションで無限スクロールを使用しています。

リストをスクロールすると、コードは自動的に URL を更新します。

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) などを実行したいと考えています。

しかし、スクロール位置を覚える方法を見つけられれば、それは素晴らしいことです。

ありがとうございました!

4

1 に答える 1

1

Turbolinks の訪問を手動でトリガーする

Turbolinks.visit(path) を使用して、Turbolinks 経由で URL に移動できます。

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

于 2014-09-12T20:13:32.320 に答える