Incluyendo javascript en línea usando content_for in rails
render js rails (2)
Estoy usando content_for y yeild para inyectar archivos javascript en la parte inferior de mi diseño, pero me pregunto cuál es la mejor práctica para incluir javascript en línea. Específicamente me pregunto dónde poner la declaración de tipo de script:
<% content_for :javascript do %>
<script type="text/javascript"> ... </script>
<% end %>
o
<% content_for :javascript do %> ... <% end %>
<script type="text/javascript">
<%= yield :javascript %>
</script>
<% end %>
Estoy usando la primera opción ahora y me pregunto si es malo incluir múltiples
...Declaraciones dentro de una vista. A veces tengo parciales que llevan a esto.
Aquí hay una solución si realmente desea mantener el número de etiquetas <script> en su html y aún así poder tener su IDE destacado javascript. Es realmente útil con jquery si solo quiere una llamada de $ (document) .ready () en su html o con js api de facebook para llamar js cuando se cargue la api, etc ...
layout_helper.rb:
def javascript_jquery_ready(script)
content_for(:javascript_jquery_ready) {
script .gsub(/(<script>|<//script>)/, "")
}
end
application.html.erb:
<script>
$(document).ready(function(){
<%= yield(:javascript_jquery_ready) %>
});
</script>
cualquier archivo de vista:
<% javascript_jquery_ready (capture do %>
<script>
$(''#share_access_link'').click(function(){
$(''#share_access_form'').slideToggle();
});
</script>
<% end) %>
Esta solución me permite mantener mi código organizado y legible en mi IDE ya que no necesito crear un código parcial para cada código js. Incluso si no cambia nada para el usuario final, el resultado html es más limpio.
Prefiero que el rendimiento del diseño tenga este aspecto:
<html>
<!-- other stuff -->
<body>
<!-- other stuff -->
<%= yield :javascript %>
</body>
</html>
Luego en una vista puedes escribir:
<% content_for :javascript do %>
<script type=''text/javascript''>
function doMagic() {
//Mind-blowing awesome code here
}
</script>
<% end %>
<!-- More view Code -->
<%= render :partial => "sub_view_with_javascript" %>
Y en el _sub_view_with_javascript.html.erb parcial también puede escribir:
<% content_for :javascript do %>
<script type=''test/javascript''>
function DoMoreMaths() {
return 3+3;
}
</script>
<% end %>
Mi razonamiento para este enfoque es que el rendimiento y el contenido están en archivos diferentes. No es SECO colocar la etiqueta de secuencia de comandos para cada contenido, pero permite que el resaltador de sintaxis reconozca el cambio de idioma en cada archivo y me ayude allí.
Si tiene varias llamadas de content_for en un solo archivo con el mismo símbolo (en nuestro caso,: javascript) consideraría consolidarlas todas en la parte superior, pero es perfecta para usar con parciales.
Y HTML está perfectamente feliz de tener tantos bloques de script como quieras. El único error posible es cuando se trabaja con el código en herramientas de desarrollador como firebug, se necesita un poco más de tiempo para encontrar el bloque de script correcto para su función. Esto solo me sucede cuando necesito establecer un punto de interrupción de javascript para depurar.