Может ли кто-нибудь помочь мне разобраться, как обновить мой просмотр, сохраняя все существующие функции ajax и will_paginate на месте.обновить содержимое ajax с помощью will_paginate
Я аа страница rehome.html.erb
<div id="options">Option Select Here</>
<div class="all_animals">
<%= render @animals %>
</div>
<% unless @animals.current_page == @animals.total_pages %>
<div id="infinite-scrolling">
<%= will_paginate @animals %>
</div>
<% end %>
// WILL_PAGINATE
<script type="text/javascript">
$(function(){
if($('#infinite-scrolling').size() > 0) {
$(window).on('scroll', function(){
//Bail out right away if we're busy loading the next chunk
if(window.pagination_loading){
return;
}
more_url = $('.pagination a.next_page').attr('href');
if(more_url && $(window).scrollTop() > $(document).height() - $(window).height() - 50){
//Make a note that we're busy loading the next chunk.
window.pagination_loading = true;
$('.pagination').text('Loading.....');
$.getScript(more_url).always(function(){
window.pagination_loading = false;
});
}
});
}
});
</script>
Это загрузит всю коллекцию @animals, постраничного его до 6 на странице, и, когда я прокрутить страницу вниз еще 6 загружены и т.д. и т.п.
контроллер, соответствующий
class PublicController < ApplicationController
before_filter :default_animal, only: [:rehome]
def rehome
respond_to do |format|
format.html
format.js
end
end
private
def default_animal
@animals = Animal.animals_rehome.paginate(:page => params[:page], :per_page => 6)
end
end
rehome.js.erb
$('.all_animals').append('<%= j render @animals %>');
<% if @animals.next_page %>
$('.pagination').replaceWith('<%= j will_paginate @animals %>');
<% else %>
$(window).off('scroll');
$('.pagination').remove();
<% end %>
Таким образом, когда вариант выбирается из выпадающего списка Аякса пост сделан, чтобы создать новый запрос, который будет возвращать новую коллекцию @animals
$.ajax({
type: 'POST',
url: '/public/rehomed',
data: data_send,
success: function(data) {
//console.log(data);
}
});
контроллер
def rehomed
# conditions logic
@animals = Animal.joins(:user).where(conditions).paginate(:page => params[:page], :per_page => 6)
respond_to do |format|
format.js {render json: @animals }
end
end
Что я хочу чтобы снова загружать новую коллекцию (с разбивкой на страницы до 6 на страницу), и когда я прокручиваю вниз, отображаются только объекты, принадлежащие новой коллекции @animals (если они есть)
На данный момент разбиения на страницы ссылки не обновляются, когда я прокрутить страницу вниз оригинальная коллекция загружена
Благодаря
EDIT
Так я создал rehomed.js.erb
файл, который в значительной степени совпадает с моим rehome.js.erb
$('.all_animals').empty();
$('.all_animals').append('<%= j render @animals %>');
<% if @animals.next_page %>
$('.pagination').replaceWith('<%= j will_paginate @animals %>');
<% else %>
$(window).off('scroll');
$('.pagination').remove();
<% end %>
и в моем перенаправлять действия
respond_to do |format|
format.js
end
Таким образом, новая коллекция животных загружается, разбивки на страницы ссылки создаются заново, используя перенаправлять URL, например, будучи
Перед
<a class="next_page" href="/public/rehome?page=2" rel="next">Next →</a>
После
<a class="next_page" href="/public/rehomed?page=2" rel="next">Next →</a>
так, когда я прокрутки вниз я просто получаю следующее, поскольку ссылки не существуют и getScript не работает
$('.pagination').text('Loading.....');
EDIT 2
я реализовал @ ответ japed, но в настоящее время после того, как новая коллекция визуализируется пагинация будет продолжать оказывать всю коллекцию БДА, включая повторяя те, которые где выбрано для новой коллекции, ее повторяющейся само по себе
Как я могу гарантировать, что для моих ссылок создан правильный URL?
Я немного запутался, в чем ваша проблема. Вы просто хотите, чтобы onclick на вашем select или onchange событие binder –
@japed извинения, я обновил свой вопрос, который, мы надеемся, объяснит все дальше – Richlewis