Ruby on Rails: link_to_remote sin Javascript (noscript)
Bueno, tras este confuso título se esconde un pequeño truco que me ha costado horrores encontrar. Estoy usando el framework Ruby On Rails para un proyecto personal y he decidido que ya soy mayor y puedo usar Ajax. El problema es que tuve una asignatura, Diseño Web Accesible, que corrompió mi mente para siempre y ahora me ando preocupando de si el navegador tiene o no Javascript y zarandajas así 🙄 .
La función link_to_remote proporciona la posibilidad de incluir un enlace que usa Javascript y XMLHttpRequest (es decir, Ajax 😛 ), pero si el navegador no dispone de Javascript o lo tiene desactivado, el enlace queda inútil, y no es lo más deseable sobretodo si ese enlace no tiene que usar Ajax por narices, aunque usarlo mejora la eficiencia y la experiencia del usuario.
Sin más preámbulos, os dejo un código de ejemplo de la función en la cuál se genera un enlace normal o uno tipo Ajax según la disponibilidad de Javascript en el navegador:
<%= link_to_remote _("login"), { :url => {:controller => "account", :action => "login", :layout => "false"}, # If JS :update => "content", :loading => "new Effect.Appear('loading_message', { duration: 0.5} ); ", :complete => "new Effect.Fade('loading_message', { duration: 0.3 }); " }, :href => url_for(:controller => "account", :action => "login") # If no JS %>
Las líneas interesantes son la segunda y la última. La segunda especifica la acción para Javascript, mientras que la última especifica el destino del enlace cuando no existe Javascript. Ambas opciones ejecutan la acción login sobre el controlador account. La opción layout que se usa en caso de tener Javascript indica al método que no genere el HTML general que rodea al formulario (es decir, la cabecera de la página, el pié, etcétera) ya que sólo se va a recargar el contenido (como se ve en la opción :update). En el caso del enlace sin Javascript, sí necesitamos dicho HTML ya que se recargará la página completa.
Edito: Recomiendo encarecidamente que si has llegado hasta aquí usando Google leas esta entrada del blog Ruido Blanco que nos apunta su creador en un comentario. Tanto el contenido de la entrada como las posteriores aclaraciones de los comentarios me han ayudado muchísimo a comprender cómo funciona Rails y incluso el protocolo HTTP 🙂
Fuente (madrecita lo que me ha costado encontrarla 😆 ): Rails Track
Parecidos razonables
-
uninitialized constant ApplicationController en Ruby on Rails
July 16, 2009
0 -
El poder de CSS
November 12, 2005
0 -
Internet Explorer 7.0 Beta2
February 1, 2006
4 -
Dropbox in docker
June 28, 2015
0 -
Añadida nueva busqueda, suscripción para ver cambios, y lecturas recomendadas
September 11, 2005
0
El código no se ve en la página web… ups (escapa los > y los <).
Un par de enlaces:
– una explicación y una solución parecida de tu problema.
– UJS Rails plugin, un plugin para utilizar JS no obstrusivo en Rails (aunque parece abandonado).
– LowPro, una librería por encima de Prototype para utilizar JS no obstrusivo.
Pero los dos últimos son para sacar matricula, claro.
Jejeje ya te estaba echando de menos 😀 veo que esta vez no tienes ninguna pega al contenido del post, así que me aplaudo 😎 ya pensaba que habría dicho alguna barbaridad railense 😆
Sobre lo que me comentas del código, yo lo veo bien 😕 será el safari que no hace caso de la etiqueta pre, o yo que no entiendo la misma pero Firefox hace lo que yo pienso que debe hacer 🙂
Aun así, como quiero que los usuarios tecnológicamente menos avanzados también puedan usar la web (que cabroncete que soy 😆 ), voy a editarlo.
me ha venido muy bien, pero tengo dos problemillas:
1. si uso _(“login”) me dice que es una funcion, asi que quito el guin bajo
2. :layout => “false” se lo pasa por la brenca, entonces he de quitar el layaut en el modelo, y deja de servir la parte sin js
un saludo