Aggiornare un elemento della pagina con i template RJS

Posted by Dibi Store Sun, 23 Sep 2007 12:46:00 GMT

Ajax indubbiamente migliora l'interfaccia e la user experience. In questo articolo vedremo come, grazie ai template RJS è possibile aggiornare un menu a drop-down, dopo aver inserito in modo dinamico un elemento nella lista.

L'esempio tipico lo si può trovare quando stiamo scrivendo un articolo nel nostro blog, e arrivati alla fine, scopriamo che la categoria in qui vorremmo inserirlo non è presente, e vorremmo quindi creala in maniera dinamica.

Iniziamo definendo nel controller l'azione che serve a salvare il nuovo valore nel database:

def create
  @category = Category.new(params[:manufacter])
  if @category.save
    @categories = Category.find(:all)
  end
end

Abbiamo predisposto l'azione che salverà il valore, e in caso affermativo richiamerà una variabile @categories che contiene l'elenco aggiornato delle categorie. Ora scriveremo la vista necessaria per il nostro esempio:

<span id="categorie"><label for="product_category_id">Categorie:</label>
<%= collection_select(:product, :category_id, @categories, :id, :name) %></span> <% form_remote_tag :url => url_for(:controller => "/categories", :action => "create") do %> <%= text_field 'category', 'name' %> <%= submit_tag 'Crea' %> <% end %>

Anche qui, prima abbiamo definito il menu a scelta, di cui trovate un articolo, infine abbiamo creato il form che richiama l'azione in background e crea il codice javascript. Ci manca solo il template RJS. Creiamo quindi (nella vista delle categorie) il file create.rjs, che conterrà il seguente codice:

page.replace_html 'categorie', "
#{collection_select(:product, :category_id, @categories, :id, :name)}" page[:categorie].visual_effect :highlight

Ecco fatto, abbiamo anche aggiunto un effetto che illumina il menu nel caso l'azione vada a buon fine. L'esempio non prevede il controllo di errori. Tuttavia se il record non viene salvato, l'utente non vedrà l'effetto high light.

Posted in  | Tags  | 1 comment

Comments

  1. Avatar Marco said about 1 month later:
    Grazie mille!

(leave url/email »)

   Preview comment