2013-04-23 14 views
6

Ich möchte eine "Last mehr" Ajax Seitenumbruch, mit Kaminari erstellen. Ich verwende diesen Code:Schienen: 'Mehr laden' Knopf mit Ajax & 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'))%>"); 

Aber das Problem ist, dass, wenn ich auf „Mehr laden“ klicken, es die beiden gleichen Artikel immer zeigt, wird die teilweise mit nie aufgefrischt zwei weitere Artikel, wie ich möchte.

+3

Sollte nicht '@articles = Admin :: Article.page (1) .per (2) '' 'articles = Admin :: Article.page (params [: page]). Per (2)' sein –

+0

Ich bin dumm. Vielen Dank für Ihre schnelle Antwort, das funktioniert! –

+0

Gut zu helfen;) –

Antwort

2

Ich stieß gerade auf ein Problem damit, das anderen helfen könnte. Abhängig von Ihrer Version von jQuery, verwenden Sie nicht replaceWith auf #load_more_link in index.js.erb.

Es gibt eine Regression (http://bugs.jquery.com/ticket/13401), dass ein leeren replaceWith nichts tut, so auf der allerletzten Seite des Sets, die link_to_next leer sein wird, so dass die Zeile: $('#load_more_link').replaceWith(''); und somit nicht die letzte „mehr“ Taste ersetzen , so laden Sie kontinuierlich die letzte Seite Ihres Datensatzes.

Behoben durch Aktualisierung der jQuery-Version oder Verwendung von empty().html('...') anstelle von replaceWith.