2014-11-03 7 views
2

Может ли кто-нибудь помочь мне разобраться, как обновить мой просмотр, сохраняя все существующие функции 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?

+0

Я немного запутался, в чем ваша проблема. Вы просто хотите, чтобы onclick на вашем select или onchange событие binder –

+0

@japed извинения, я обновил свой вопрос, который, мы надеемся, объяснит все дальше – Richlewis

ответ

2

отформатирует позволяет установить Params хэш, так что вы должны быть в состоянии изменить его использовать другие действия контроллера, как это:

will_paginate(@animals, :params => { :controller => "public", :action => "rehomed" }) 
+0

спасибо, что действительно решает мою проблему установки правильных ссылок, что здорово, но по какой-то причине теперь, как только я доберусь до конца новой коллекции результатов, она просто продолжает, а затем загружает все записи, оставшиеся во всей db – Richlewis

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