Ruby Forum Rails France > Petite question ajax/xhr.

Posted by Guillaume Morain (kouini)
on 07.08.2008 10:09
Bonjour,

J'essaye actuellement de recoder un système de spoiler sur une vue.

J'ai ce code dans ma vue index.html.erb

<%= link_to_remote "spoiler", :url => { :action => 'spoiler'...

Dans mon controller :

def spoiler
  if request.xhr?
   calculate textespoiler
  end
end

Dans mon spoiler.rjs :

page.visual_effect :toggle_appear... (pour gerer l'effet visuel du
spoiler)
et

page.insert_html :bottom, "id_div", "textespoiler" (pour gerer
l'insertion du spoiler dnas la bonne balise)

Mon problème est que je voudrais que la requete xhr ne s'execute qu'une
seule fois, et quand l'utilisateur clique sur le bouton "spoiler" une
deuxième fois  que le spoiler s'affiche mais sans être recalculé (d'ou
l'interet d'ajax).

D'autre part, mon spoiler s'affiche autant de fois que je clique sur le
bouton (normal j'ai pas de conditions dans le insert_html). Je passerais
à terme dans un systeme de render :partial je pense.

Une idée ?

Bonne journéé.
Posted by Cyril Mougel (shingara)
on 07.08.2008 21:14
(Received via mailing list)
2008/8/7 Guillaume Morain <list-incoming@andreas-s.net>:
>
> def spoiler
>  if request.xhr?
>   calculate textespoiler
>  end
> end

def spoiler
  if request.xhr?
    calculate textespoiler if params[:cache]
  end
end

>
> Dans mon spoiler.rjs :
>
> page.visual_effect :toggle_appear... (pour gerer l'effet visuel du
> spoiler)
> et
>
> page.insert_html :bottom, "id_div", "textespoiler" (pour gerer
> l'insertion du spoiler dnas la bonne balise)

page.visual_effect :toggle_appear
page.insert_html :bottom "id_div", "textspoiler" unless params[:cache]
if params[:cache]
  methode qui ajoute le param cache dans la partie qui fait la requete 
xhr
end

Ca peux être une idée simple de cache.

Sinon tu as une bonne technique avec gestion de cache_page comme
indiqué dans un railscast[1]

[1] : http://railscasts.com/episodes/89-page-caching


--
Cyril Mougel
http://blog.shingara.fr
Posted by Guillaume Morain (kouini)
on 08.08.2008 11:34
Merci beaucoup de ta réponse !
Je vais de ce pas faire un peu de cache.