Publicado por Rafael Rosa em 06 de June de 2010
JavaScript não-obstrutivo com Rails 3
Clique aqui para adicionar ao del.icio.us | Nenhum comentário - Deixe o seu agora!Esse artigo foi escrito por Rizwan Reza. Mais informações no rodapé.
Um dos grandes feitos, e também uma grata surpresa, do Rails 3 foi a adição do Javascript não-obstrutivo, conhecido como Unobstrusive Javascript ou UJS em inglês. A princípio, todos pensavam que o USJ não iria ser incluído no Rails 3 por questões de tempo e mão-de-obra, mas pouco antes do primeiro beta, a comunidade se mobilizou e vários desenvolvedores se organizaram para finalizar uma das funcionalidades mais esperadas do Rails 3.
O Rails sempre usou técnicas de ponta, e não foi diferente com o Rails 3: a implementação do UJS nele usa os atributos data-* trazidos pelo HTML5. Dessa forma, o Rails não gera código Javascript baseado no Prototype inline (os helpers antigos podem ser encontrados aqui), ao invés disso, os helpers definem um atributo data na tags onde o Javascript deve ser adicionado.
Isso siginifca que você pode tratar esses atributos data em qualquer framework Javascript e gerar o código que quiser para implementar as funcionalidades desejadas, o que oferece um alto grau de flexibilidade para as aplicações. Além disso, o Rails 3 inclui s implementação dos helpers padrão em Prototype e a versão em jQuery é mantida oficialmente aqui.
Vamos ver como é fácil trocar o Prototype pelo jQuery no Rails 3. No diretório raiz de uma aplicação Rails 3 execute:
curl -L http://code.jquery.com/jquery-1.4.2.min.js > public/javascripts/jquery.js
curl -L http://github.com/rails/jquery-ujs/raw/master/src/rails.js > public/javascripts/rails.js
Segue um initializer escrito por Yehuda Katz que você pode colocar em config/initializers para que o javascript_include_tag :defaults use o jQuery ao invés do Prototype.
module ActionView::Helpers::AssetTagHelper
remove_const :JAVASCRIPT_DEFAULT_SOURCES
JAVASCRIPT_DEFAULT_SOURCES = %w(jquery.js rails.js)
reset_javascript_include_default
end
Feito isso, o Rail não sabe que deixou de usar o Prototype, todos os helpers com :remote => true serão tratados pelo rails.js e processados com jQuery. Se quiser, você pode remover os arquivos do Prototype de public/javascripts se você não for mais utilizá-los.
Como pode ver, usar UJS no Rails 3 é muito fácil. Embora seja necessário fazer algumas configurações se você não utilizar o padrão do Rails, é muito mais fácil do que nas versões anteriores. Você também deveria dar uma olha nas incríveis Notas de Lançamento do Rails 3 para ficar por dentro das mudanças envolvendo os helpers e a seção sobre UJS no meu artigo do RailsDispatch (todos os links em inglês).
Nota do tradutor: também recomendo ler o artigo "Rails 3: Introdução a Javascript Não-Obstrutivo e Responders" escrito por Fabio Akita no seu blog AkitaOnRails, que explica e exemplifica, em português, como utilizar o UJS do Rails 3, além de falar sobre os responders, que são uma nova forma de enxugar ainda mais os controllers, vale a leitura.
[artigo escrito por] Rizwan Reza, um desenvolvedor e designer apaixonado pelo seu trabalho, autodidata, que tem trabalhado com Rails desde o começo de 2005. Ele começou a contribuir com o Rails no meio de 2008 e tem contribuído com novas funcionalidades e correções desde então. Rizwan se preocupa em oferecer uma boa experiência para o usuário do começo ao fim, desde o branding até o backend da aplicação. Você pode entrar em contato através de contact@rizwanreza.com.


