Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)

09 junho, 2006

Usar update_page em link_to_function

Introdução

Bruce Williams diz que vive numa terra de modelos e ajudantes de Rails. Para nos dar uma ideia de que está a falar a sério diz-nos o seguinte. Que a sua actual aplicação tem serca de 670 ficheiros de modelos separados (com cerca de 8500 linhas) e 75 ajudantes (com cerca de 2350 linhas) e que continua a crescer.

O que é que isto significa - para além do facto de o TextMate ser o nosso melhor amigo? Significa que se há alguma coisa que ele saiba sobre Rails é como gerir um grande volume de modelos e de código relacionado com vistas e construção de infraestruturas para ajudar a SECAR (DRY - não te repitas) o caos.

Ele diz-nos que irá tentar ajudar outros programadores, responsáveis pelo desenvolvimento de sítios na web que estejam no mesmo barco escrevendo uma série de artigos debaixo do título genérico Rails Views. Estes artigos irão realçar técnicas usadas por si no dia-a-dia. Poderá ser que as achemos úteis, e acrescenta que podem não ser a única forma de obter o mesmo resultado mas que é o processo por si usado.

Diz-nos ainda que esta série de artigos Rails Views partem do princípio que o leitor sabe Ruby bem, e dessa forma ele não irá tratar de se focar na explicação dos detalhes pois espera que um programador decente em Ruby os possa perceber. Irá partir do princípio que o leitor usa Edge Rails.

Utilização de update_page na link_to_function

Uma das técnicas que menos vejo usada nas aplicações em Rails e uma das que acho não só elegante mas que poupa tempo é o uso de update_page directamente na link_to_function .

Porque é que não há mais gente a usar esta técnica? Não percebo. Muito do trabalho foi para RJS... e assim porque não usá-lo?

Eis um exemplo rápido, de duas formas. Tornemos todos os parágrafos de texto, verdes, na página usando a classe CSS irish , só porque sim - finja que é dia de S. Patrício por uns instantes. De facto enfiemos rapidamente um anúncio de "Dia de São Patrício" também.

Em primeiro lugar a versão tradicional (mesmo que melhorada com o prototype) link_to_function .

link_to_function("Toca-me!", "$('p').each( function(tag) {tag.addClassName('irish');} ); new Effect.SlideDown('banner',{duration:0.4});" ) e, com update_page : link_to_function("Toca-me!", update_page{|page| page.select('p').each{|p| p.addClassName('irish')} page[:banner].visual_effect :slide_down, :duration => 0.4})

São aproximadamente do mesmo tamanho... qual é a espiga?

  • A Ruby é mais poderosa e mais fácil de ler do que JavaScript tenha em mente que este é um exemplo muito simples
  • Uma vez tendo começado a interpolar dinamicamente ids de diferentes elementos, numa string em javascript (claro está usando escape_javascript ), a versão sem update_page torna-se mais difícil de fazer e de manter (deixe só passar o almoço e volte ao seu código e veja)
  • É mais fácil expandir esta técnica usando outros ajudantes e infraestruturas (passando page para adicionar código comum por exemplo) e depois passar strings para serem concatenadas - correndo o risco de um erro sintático no javascript neste processo (alguém poderá dizer "falta de ponto-e-vírgula?").

Este técnica é pequena e simplesmente a minha preferida.

Sem comentários: