# \[Paris on Rails 2006\] RJS, Ajax, JavaScript : notes

**URL:** <https://www.ruby-forum.com/t/paris-on-rails-2006-rjs-ajax-javascript-notes/76692>\
**Category:** FR\
**Created:** [November 20, 2006, 3:36pm UTC](https://www.ruby-forum.com/t/paris-on-rails-2006-rjs-ajax-javascript-notes/76692 "2006-11-20T15:36:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jean-FranSSSSois](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/aeb1de/32.png) [@Jean-FranSSSSois](https://www.ruby-forum.com/u/Jean-FranSSSSois)\
**Post date:** [November 20, 2006, 3:36pm UTC](https://www.ruby-forum.com/t/paris-on-rails-2006-rjs-ajax-javascript-notes/76692/1 "2006-11-20T15:36:00Z")

</div>

Paris on Rails, vendredi 17 novembre 2006.

4e prÃ©sentation (aprÃ¨s-midi).

== RJS, Ajax, JavaScript - SÃ©bastien Gruhier

L’idÃ©e : faire du JavaScript sans Ã©crire une ligne de JavaScript.

- Exemple de dÃ©monstration.

[NdU: La dÃ©mo en ligne et le code de l’appli de SÃ©bastien  
et d’ores et dÃ©jÃ dispo Ã [http://demo-por2006.xilinus.com/](http://demo-por2006.xilinus.com/)  
LÃ il montre l’Ã©quivalent de : [http://demo-por2006.xilinus.com/html](http://demo-por2006.xilinus.com/html)  
puis [http://demo-por2006.xilinus.com/ajax](http://demo-por2006.xilinus.com/ajax) ]

CrÃ©ation d’un nouveau compte.  
on entre son Nom/PrÃ©nom et un identifiant → l’appli web nous dit  
si le compte est crÃ©Ã©e et l’identifiant choisi est disponible.

Je rÃ©essaie mais gÃ©nÃ©ralement au bout de 4 fois, j’abandonne  
et je vais voir ailleurs.

- en HTML classique : Click / Wait / Refresh.

- en Ajax : traitement asynchrone.

Explication :  
(schÃ©ma Ã visualiser avec une police Ã chasse fixe)

* * *

|client | → | actualisation | → | client |  
| | XHR | par RJS | | |

* * *

```
                  [2] [3]

```

[2] gÃ©nÃ©ration de code JS en pur Ruby

[3] Prototype voit que c’est du text/js et interprÃªte le code

- Deux Frameworks JS : Prototype et [Script.aculo.us](http://Script.aculo.us)

grand nombres de helpers

- Pourquoi utiliser des frameworks JS ?

- Prototype 1.5

Object : extends → simule l’hÃ©ritage de classe  
String : sub, gsub, camelize, escapeHTML…  
Array : first, last, each  
Event, Function

- Nouveaux objets  
Enumerable, Element, Ajax, Form, Position

- SÃ©lection par ID avec $ :  
$(‘monID’).show()

- CSS SÃ©lectors avec $$ :  
var array = $$(‘span selected’)

- syntaxe trÃ¨s proche de celle de Ruby  
[obj1, obj2, obj3].each(  
function(objet) {  
…  
}  
);

ChaÃ®nage des appels : $(‘monID’).next().show();  
Gestion simple des Ã©vÃ©nements  
Event.observe(document, ‘keydown’, maFonction);

- Support d’Ajax  
new Ajax.Request(‘/mon\_url’, { asynchronous : true,  
evalScripts : true, onComplete : maCompleteFunction });

- Cross Browser

exemple de ce qu’on devait faire avant :

(gÃ©rer les diffÃ©rences d’implÃ©mentation, notamment  
avec IE)

isLeftClick : function(event) {  
return (((event.which) && (event.which == 1)) ||  
((event.button) && (event.button == 1)));  
}

avec Prototype : Event.isLeftClick(event);

Que se passe si IE7 pas compatible avec IE6 ?  
faut rajouter un ((event.machin) && (event.machin == 1)) ?

LÃ faudra juste mettre Ã jour Prototype qui se chargera  
d’implÃ©menter Ã§a et notre code restera _le mÃªme_.

Event.isLeftClick(event);  
(avant et aprÃ¨s mise Ã jour Prototype)

- Cheet Sheet  
(NdU: SÃ©bastien fait rÃ©fÃ©rence Ã Ã§a :  
[Prototype Dissected - Snook.ca](http://www.snook.ca/archives/javascript/prototype_disse/) )

(Ã mettre en fond d’Ã©cran ?)

- [Script.aculo.us](http://Script.aculo.us)

- Comparatif framework, graphique trouvÃ© chez [Ajaxian.com](http://Ajaxian.com)  
(NdU: je crois que c’est Ã§a :  
[Purchase Intent Data for Enterprise Tech Sales and Marketing | TechTarget](http://ajaxian.com/archives/ajaxiancom-2006-survey-results) )

entre Prototype/Script.aculo.us, Dojo, DWR, Moofx, jQuery,  
Yahoo UI, Atlas, Mochikit, XAJAX, GWT

Prototype en tÃªte. Pas forcÃ©ment utilisÃ© avec Rails.

(NdU : pas sÃ»r : Atlas, ya que M$ qui l’utilise ?)

- RJS  
subtile intÃ©gration des frameworks JS dans Rails  
cÃ´tÃ© serveur avec techno client.

→ Ã©crire le moins de code HTML

- Vue RJS  
nouveau type de vue avec extension .rjs  
render sans layout ( :layout =\> false)  
Content-Type mis Ã text/js

- Une instance de JavaScriptGenerator (page) dispo dans le template.

- #{@item.name}
”  
page.visual\_effect :highlight, ‘list’  
page.hide ‘status-indicator’, ‘cancel-link’

Vue RJS

page.select(“p.hint”).each do |hint|  
hint.visual\_effect :highlight  
end

- Rendu inline

Directement dans le contrÃ´leur :

render :update do |page|  
page.visual\_effect :blind\_up, “user\_#{params[:id]}”  
end

→ rendu directement dans le contrÃ´leur (viole MVC mais  
Ã©vite un fichier rjs avec une seule ligne de code)

- Respond\_to  
permet de gÃ©rer plusieurs types de requÃªtes.

- Code de la dÃ©mo :

vue : un text\_field avec un observe\_field

\<%= observe\_field “user\_login”, :frequency =\> 0.5,  
:url =\> {:action =\> “verify\_login” },  
:with =\> “user\_login”,  
:loading =\> “$(‘progress’).show()”,  
:loaded =\> “$(‘progress’).hide()” %\>

et voir le code de #verify\_login dans ajax\_controller.rb

render :nothing =\> true, :status =\> ‘204 No Content’ and  
return unless request.xhr? and request.post?

→ au dÃ©but de l’action pour Ãªtre sÃ»r d’avoir du POST ou  
de l’XmlHttpRequest (NdU: mmmh on peut pas utiliser verify  
Ã la place ?)

Navigation : Rien Ã faire !

5 lignes dans le contrÃ´leur et j’ai fait un site Web2.0 !

- Tests  
ARTS, plugin par Kevin C. (plugin candidat Ã  
l’inclusion dans Rails)

\*\* Conclusion

2 frameworks JavaScript

Rails : premier framework Ã avoir intÃ©grer Ajax, de maniÃ¨re simple  
et complet

90% de JS (NdU: euh… Ã Ã©crire en moins ? ou couvre 90% des  
besoins ?)

demo : [http://demo-por2006.xilinus.com](http://demo-por2006.xilinus.com)  
(+ sources)

- Questions.  
1/ render :partial et page ?

:partial et page, rien Ã voir. Mais on peut utiliser RJS  
pour mettre Ã jour un partial.

(celui qui pose la question dÃ©crit ce qu’il a essayÃ© de faire)

Euh… Ã§a c’est la mauvaise mÃ©thode.

2/ AccessibilitÃ© d’AJAX, avec Unobstrusive JS

- plugin avec un statut particulier, DHH est tombÃ© amoureux  
de celui-ci depuis RailsConf Europe, oÃ¹ un talk Ã©tait consacrÃ©  
Ã UJS.
- Ã terme dans Rails ?

3/ Comment Prototype et Rails sont liÃ©s ?  
le crÃ©ateur Sam S. est dans la Core Team, il a dÃ» crÃ©er  
Prototype pour Ãªtre intÃ©grÃ© Ã Rails.

4/ Ya pas un Page dans le contrÃ´leur, problÃ¨me du MVC, c’est gÃªnant ?  
(NdU: quand on fait directement un render :update do |page| dans  
le contrÃ´leur)

MVC : c’est une aspiration, pas une rÃ¨gle strict.

(NdU: on peut mettre dans un helper, on met tous les unilignes dans  
un seul fichier helper, et voilÃ tout le monde est content. Voir  
aussi le talk de Jason Molina Jr Ã RailsConf Europe)

```
-- Jean-FranÃ§ois.

```
