2013-04-23 12 views
6

Chciałbym stworzyć "ładowanie więcej" stronicowania ajax, z Kaminari. Używam tego kodu:Szyny: przycisk "Załaduj więcej" z Ajaxem i Kaminari

class BienvenueController < ApplicationController 
    def index 
    @articles = Admin::Article.page(1).per(2) 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
end 

# Bienvenue#index 

<div class="container" style="min-width:<%= @width %>px"> 
<%= render "shared/articles" %> 
<%= link_to_next_page @articles, 'Load More', :remote => true, :id=>"load_more_link" %> 

# Shared/articles 

<% @articles.each do |a| %> 
     <article class="<%= a.rubrique.color %>"> 
       <div class="sharing"> 
        <%= image_tag "facebook-32.png" %> 
       </div> 
       <p class="color<%= a.rubrique.color %>"><i>Le <%= I18n.localize(a.created_at, :format => :long) %> par David Perrotin</i></p> 
       <h1><%= a.titre %></h1> 
       <div class="excerpt"> 
        <%= a.chapo.html_safe %> 
       </div> 
       <div class="image"> 
        <%= image_tag a.mainphoto.url(:medium), :width=>"100%" %> 
       </div> 
       <div class="contenu"> 
        <%= a.contenu.html_safe %> 
       </div> 
       <div class="readmore"> 
        <%= link_to "Continuer la lecture", article_path(a) %> 
       </div> 
      </article> 
     <% end %> 

# index.js.erb 

$('.container').append("<%= escape_javascript(render 'shared/articles')%>"); 
$('#load_more_link').replaceWith("<%= escape_javascript(link_to_next_page(@articles, 'Load More', :remote => true, :id=>'load_more_link'))%>"); 

Ale problemem jest to, że po kliknięciu na „Załaduj więcej”, to zawsze pokazuje dwie te same artykuły, częściowe nie jest odświeżany z jeszcze dwa artykuły, tak jakbym chciał.

+3

Nie należy tego "@articles = Admin :: Article.page (1) .per (2)' być "@articles = Admin :: Article.page (params [: page]). Per (2)' –

+0

Jestem głupi. Dziękuję bardzo za szybką odpowiedź, która działa! –

+0

Cieszę się, że mogę Ci pomóc;) –

Odpowiedz

2

Po prostu wpadłem na ten problem, który może pomóc innym. W zależności od wersji jQuery, nie używaj replaceWith na #load_more_link w index.js.erb.

Jest regresji (http://bugs.jquery.com/ticket/13401), że pusty replaceWith nic nie robi, więc na ostatniej stronie w secie, link_to_next będzie pusta, dzięki czemu wiersz: $('#load_more_link').replaceWith(''); a zatem nie zastąpi przycisk ostatnią „więcej” , więc będziesz nieustannie ładować ostatnią stronę swojego zestawu danych.

Naprawiono, aktualizując wersję jQuery lub używając empty().html('...') zamiast replaceWith.

Powiązane problemy