Usando jQuery com Rails
04/06/08
Pode me chamar de velha guarda, mas prefiro escrever meu próprio Javascript. E depois que comecei a trabalhar com Ruby on Rails e jQuery, minha vida ficou infinitamente mais simples.
E dessa simplicidade, surgiu o rails.js, um dispatcher de eventos feito para ser usado com jQuery, no Rails.
A idéia é que, baseado no controller e action que está sendo renderizado, seja chamado o método correto do Javascript para aquele contexto.
Para ver como funciona na prática, crie um novo projeto com o comando abaixo.
rails pages
Você precisará de um controller chamado "pages", com algumas actions.
script/generate controller index show new create edit update
Crie também um arquivo de layout em "app/views/layouts/application.html.erb" com o conteúdo abaixo.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Pages</title>
<%= javascript_include_tag "jquery", "rails", "pages" %>
<meta name="rails-controller" content="<%= controller.controller_name %>" />
<meta name="rails-action" content="<%= controller.action_name %>" />
</head>
<body>
<%= yield %>
</body>
</html>
O segredo está nesses dois campos meta, com os nomes do controller e action. É baseado neles que o rails.js irá chamar o método correto.
Agora vem o passo mais importante de todos: remova os arquivos do Prototype. Afinal, eles não servirão para nada! ;)
rm public/javascripts/*
Você precisará do jQuery e do rails.js. Copie-os para o diretório "public/javascripts". Crie também um arquivo em "public/javascripts/pages.js".
Agora, vem a parte legal! Por exemplo, imagine que você queira executar algum Javascript para as actions "index" e "new". Você pode criar algo como isso.
Rails.pages = {
'index': function() {
alert('calling js for index');
},
'new': function() {
alert('calling js for new');
}
}
Se você acessar o endereço http://localhost:3000/pages/, o método Rails.pages.index() será chamado.
E o que acontece se eu acessar a action "create", que normalmente é o fallback do método "new"? Quando você acessar a action "create", o método "new" será chamado no lugar, assim como a action "update" chamará o método "edit". Para ver como isso funciona, experimente acessar os endereços http://localhost:3000/pages/new e http://localhost:3000/pages/create.
Eu tenho uma opinião bastante forte a respeito do Rails gerar Javascript. É conveniente? Claro que é! Mas ainda sim prefiro escrever meu próprio Javascript.
Você pode fazer o download deste exemplo aqui.

Comentários #
Eu sempre achei que o Rails gerar JS é tão "recomendável" quanto usar o velho scaffolding ou os pesados métodos do ActiveRecord: Use pra coisas rápidas e inocentes, mas não coloque isso em Produção numa aplicação com muitos acessos, pelo amor de Jah.
Eu não sabia como funcionava a integração de outra biblioteca no Rails (já que não sou desenvolvedor Rails), agora já sei em teoria, ótimo post.
E da próxima vez, chame a biblioteca pelo nome completo: JesusQuery XD
Muito bom Nando, não sabia que era tão integrado assim, vou começar a brincar com estes 2….
Caramba Nando, esse post é tão bom e útil, que só pra você ter uma idéia, aqui na empresa estamos todos fazendo dessa forma. Não acho bom trabalhar no modo implícito, toda vez, sem saber o que está acontecendo, sem saber se o modo como está sendo feito pela framework tem ou não performance. É bom podermos ter escolha. Sei que essa característica implícita é herdada do próprio Ruby, mas enfim…
Muito legal, comecei a usar sua biblioteca hoje. Eu desenvolvi uma similar para um framework PHP anos atrás, e graças ao seu Rails.js posso usar minhas mesmas práticas no Rails. Parabéns!
Deixe um comentário