2013-11-14 4 views
2

Я использую бесконечную прокрутку в своих рельсах 4 приложения.turbolinks изменить url вручную

код автоматически обновляет 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); 

Это хак, чтобы попытаться получить что-то, что работал в рельсах 3 для работы в рельсах 4 ...

Кажется, что это работает, но оно не является чистым и имеет некоторые проблемы.

Основная проблема заключается в том, что положение прокрутки не напомнено. При нажатии кнопки «Назад» я вернусь в начало страницы.

Есть ли способ сделать это чище. В идеале вместо этого window.history.replaceState я бы хотел сделать Turbolinks.replaceState (newUrl) или что-то в этом роде.

Но если бы я мог найти способ запомнить положение прокрутки, было бы здорово уже.

Спасибо!

ответ

Смежные вопросы