Prototype, c’est le framework JS inclus par défaut dans Rails. Il est utile surtout pour les templates .rjs. A quoi sert les .rjs ? C’est simple :

Unlike conventional templates which are used to render the results of an action, these templates generate instructions on how to modify an already rendered page. This makes it easy to modify multiple elements on your page in one declarative Ajax response. Actions with these templates are called in the background with Ajax and make updates to the page where the request originated from.

Les View d’habitude sont le résultat d’une action. Les RJS sont les résultats d’un appel Ajax, et modifient le View qui l’appelle.

Voici mon fichier bbxtest.js.rjs :

page.remove :loader
page.remove :results
page.insert_html :bottom, 'main', :partial => 'loader'
page.insert_html :bottom, 'main', :partial => 'bbxtest'
page.visual_effect :highlight, 'results'

Il vient d’où ce page ?

An instance of the JavaScriptGenerator object named +page+ is automatically made available to your template, which is implicitly wrapped in an ActionView::Helpers::PrototypeHelper#update_page block.

Avec, je peux appeler des méthodes de l’API Prototype.
Ici, je vire les div id=”loader” (qui contient un petit spinner Ajax) et id=”results” (qui contient le résultat de mon formulaire, en l’occurence le contenu de mon input). C’est pour éviter que le résultat de plusieurs appels Ajax se suivent.
Ensuite, j’insère dans ma div id=”main” les partials “loader” et “bbxtest” avec un petit effet visuel.

Avant

avant

Après

apres