JQuery и контроллер проблема с бесконечной прокруткой страницы

0

Недавно я реализовал бесконечную прокрутку страницы, как показано в сообщении в блоге. Итак, я показываю 10 сообщений на странице, когда пользователь достигает нижней части страницы, приложение запускает запрос "получить" к действию индекса, загружает еще 10 сообщений и добавляет их на страницу с помощью jquery.

Вот моя реализация:

post_controller

def index
if params[:tags]
  @posts = Post.tagged_with(params[:tags]).paginate(:page => params[:page], :per_page => 10)
else
  @posts = Post.paginate(:page => params[:page], :per_page => 10)
end

respond_to do |format|
  format.html
  format.js { render 'index.js.erb'}
end
end

index.js.erb

$('#posts').append('<%= escape_javascript(render @posts) %>');
$('a.load-more-posts').attr('href', '<%= posts_path page: @posts.next_page %>');

<% unless @posts.next_page %>
  $('a.load-more-posts').remove();
<% end %>

Я сталкиваюсь с некоторыми проблемами при попытке фильтровать сообщения по тегу. Корневая проблема заключается в том, что один и тот же файл index.js.erb запускается, когда пользователь вручную щелкает тег, чтобы видеть сообщения с этим тегом, а также бесконечную функцию прокрутки.

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

С этого момента казалось очевидным, что я должен отделить действие индекса и отдельное действие posts_tagged_with. У этого действия будет свой собственный js файл, который очень похож, но он заменит html, а не append.

Проблема заключается в том, что исходный index.js.erb по-прежнему вызывается, когда пользователь прокручивает вниз, что добавляет сообщения из действия индекса.

Есть ли более эффективная реализация для этого?

Теги:

2 ответа

0
Лучший ответ

В index.js.erb вы можете изменить свои первые две строки для этого:

    $('#posts').<%= params[:tags] && params[:page].nil? ? "html" : "append" %>('<%= escape_javascript(render @posts) %>');
    $('a.load-more-posts').attr('href', '<%= posts_path page: @posts.next_page, tags: params[:tags] %>');
  • 0
    Вы сломали бы бесконечную прокрутку, если бы прокручивали, когда выбран тег, верно?
  • 0
    Ты прав. Я редактирую ответ, чтобы не сломать бесконечное.
Показать ещё 2 комментария
0

Похоже, что лучшим способом было бы реализовать действие posts_tagged_with, чтобы вы могли отслеживать, какие теги выбраны, и endless_scroll, как обычно (используя append) с этими тегами. Затем, когда выбран другой тег, вы можете заменить содержимое новой коллекцией, используя метод jquery html.

  • 0
    Проблема в том, что бесконечная прокрутка все равно вызовет действие index и добавит больше постов, которые не помечены
  • 0
    Вы должны опубликовать свой бесконечный код JS. Его необходимо изменить, чтобы опубликовать правильное действие и включить выбранные теги.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню