[Ror-es] Ajax: recargar contenidos cada cierto tiempo. periodically_call_remote

Gonzalo Rodríguez-Baltanás Díaz
Fri Jul 2 18:48:09 GMT 2010


Mis pesquisas han tenido éxito. He conseguido hacer un periodically_call_remote a la rails 3, es decir usando javascript no intrusivo.

Antes de iniciar cómo he resuelto el problema, decir que existe esta librería:
http://github.com/rails/prototype_legacy_helper

Con dicha librería se tiene acceso a los helpers que han quitado. Yo la he usado y no me gusta el resultado, simplemente no me ha funcionado. Hizo falta instalarlo a mano, moviendo el archivo prototipe_helper.rb a la carpeta lib/ de mi app, ya que el método normal rails install .... no funcionó como debería.

Por esa razón, he buscado cómo se hace de la manera que Rails 3 favorece. Y eso es usando UJS.


Estos enlaces me han sido muy útiles:

Qué es UJS:
http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-technique/

Cómo se ha aplicado en Rails 3:
http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/

Un Railscast sobre el tema, un buen ejemplo:
http://media.railscasts.com/videos/205_unobtrusive_javascript.mov

Introducción a Ajax mediante Prototype
http://www.prototypejs.org/learn/introduction-to-ajax

Y el método de Prototype que hay que usar a partir de ahora en lugar de periodically_call_remote:
http://api.prototypejs.org/ajax/ajax/periodicalupdater/


Y Cómo lo he usado en mi aplicación:

Mi aplicación es un sencillo IRC que usa Ajax. 

Tengo un controlador llamado Chat.
http://gist.github.com/461712

Y una vista, que incluye este partial.
http://gist.github.com/461718

Desde esa vista parcial se llama mediante Ajax.PeriodicalUpdater a la acción update en el controlador chat. Este controlador devuelve  render, que Ajax.PeriodicalUpdater  mete donde le indicamos. 

Si tenéis dudas(así aprendo), sugerencias(me hacen falta), críticas(me hacen aún más falta, 1º vez que uso Ajax) no dudéis en escribir :)

Si quereis ver el código completo:
http://github.com/Nerian/Upobook


Un saludo


El 02/07/2010, a las 15:33, Gonzalo Rodríguez-Baltanás Díaz escribió:

> Es correcto, ahora se usa :remote para los form y demás.
> 
> Según lo que he investigado preguntando el irc de Rails el helper periodically_call_remote ya no existe.
> Ahora se usa Prototype a pelo.
> 
> Otra opción es usar :   http://github.com/rails/prototype_legacy_helper
> 
> Me parece todo muy raro. Seguiré investigando. 
> 
> 
> El 02/07/2010, a las 14:07, Andrés gutiérrez escribió:
> 
>> No he utilizado nunca "periodically_call_remote". Pero creo que en Rails 3 han intentado hacer el javascript menos intrusivo. Por ejemplo creo que el remote_form_for (Que era para hacer form AJAX) metia codigo js en el HTML generado. Creo que este metodo se lo cargaron. Y ahora se consigue lo mismo pero sin ser intrusivo con el form_for y un parametro que es :remote => true. 
>> 
>> Igual ha pasado algo parecido con el metodo que buscas.
>> 
>> NOTA:
>> Todo lo que he dicho lo he hecho de forma perezosa. Sin contrastar información y con mis escasos conocimientos. Aunque espero que te haya podido apuntar en buena dirección.
>> 
>> El 2 de julio de 2010 13:46, Gonzalo Rodríguez-Baltanás Díaz  escribió:
>> 
>> Hola
>> 
>> Quiero que el div con id 'comments_list' se actualice cada cierto tiempo. Para ello según la documentación  en:
>> 
>> http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html  
>> http://apidock.com/rails/v2.3.8/ActionView/Helpers/PrototypeHelper
>> 
>> Se usaría el método periodically_call_remote
>> 
>> Así que en la vista tengo:
>> 
>> <%= periodically_call_remote(:url => chat_index_path, :update => 'comments_list') %>
>> 
>> 
>>
>> <%= render %> >>
>>
>> >> <%= javascript_include_tag :defaults %> >> <%= csrf_meta_tag %> >> >> En el layout de application tengo incluyo las librerías de javascript, y según veo en el HTML se incluye la de prototype. >> >> <%= javascript_include_tag :defaults %> >> >> Pero me devuelve este error al cargar la página: >> >> undefined method `periodically_call_remote' for #<#:0x1040a6860> >> >> Uso Rails 3 beta4. En esta documentación no aparece periodically_call_remote. ¿Quizás ya no se usa? >> http://apidock.com/rails/v3.0.0.beta3/ActionView/Helpers/PrototypeHelper >> >> Un saludo >> >> >> >> _______________________________________________ >> Proudly free of Ruby Forum crossposting since 01/07/2009 >> Ror-es mailing list >> >> >> >> >> _______________________________________________ >> Proudly free of Ruby Forum crossposting since 01/07/2009 >> Ror-es mailing list >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20100702/d3f48ed8/attachment-0001.htm