quinta-feira, 5 de março de 2009

will_paginate ajax

Eu precisei de mudar o modo de paginação para Ajax de uma aplicação Rails que estou fazendo atualmente...
Lí em 2 blogs que ensinavam como fazer usando RemoteLinkRenderer e quando cheguei no repositório do will_paginate dei de cara com o mislav criticando essa solução, bem se o Cara, que é o CARA fala isso eu vou temar?
então segui a solução proposta

http://wiki.github.com/mislav/will_paginate/ajax-pagination

que seria algo assim:

Crie um partial com um DIV onde ficará o resultado do paginate
pra nao ficar igualzinho o do mislav mudei só os nomes....
# _resultado_busca

<% for c in @clientes %>
<%= c.nome .... blablabla %>
<% end %>
<%= will_paginate @clientes %>

No controller fica algo assim:
# clientes_controller.rb
def index
@clientes = Cliente.paginate :page => params[:page]

respond_to do |format|
format.html
format.js {
render :update do |page|
page.replace_html 'resultado', :partial => 'resultado_busca'
end
}
end
end

Depois adicionar ao application.js
# public/javascripts/application.js

document.observe("dom:loaded", function() {
// the element in which we will observe all clicks and capture
// ones originating from pagination links
var container = $(document.body)

if (container) {
var img = new Image
img.src = '/images/spinner.gif'

function createSpinner() {
new Element('img', { src: img.src, 'class': 'spinner' })
}

container.observe('click', function(e) {
var el = e.element()
if (el.match('.pagination a')) {
el.up('.pagination').insert(createSpinner())
new Ajax.Request(el.href, { method: 'get' })
e.stop()
}
})
}
})
Essa parte eu tive que fazer um pouco diferente,
porque não são em todos os lugares que eu uso
o prototype, tipo na tela inicial da aplicação... então
eu coloquei esse código no inicio do meu layout onde eu uso...


Finalmente, eu só consegui funcionar usando as versões mais novas
do prototype e de JQuery
jquery-1.3.2.js e prototype-1.6.0.2.js
e usando o script lowpro

procurei usar através deste post
http://railsontherun.com/2007/9/27/ajax-pagination-in-less-than-5-minutes

link para baixar o lowpro =>
http://svn.danwebb.net/external/lowpro/trunk/dist/lowpro.js

<%= javascript_include_tag 'lowpro' %>

só não consegui fazer o spinner.gif funcionar...
em breve se conseguir posto a solução

Nenhum comentário:

Postar um comentário