Orden importación javascript_include_tag
En el último proyecto en el que he estado involucrado, me he percatado de una cosa curiosa, necesitaba que una función contenida en archivo javascript llamado map.js llamará a una función contenida en application.js.
Para ello pensé en cargar los javascript en el orden adecuado pensando que el orden de la impresión del helper en el html, sería el indicado por mi en los parámetros
<%= javascript_include_tag :defaults, "map"%>
Obteniendo este resultado:
<script src="/javascripts/prototype.js" type="text/javascript"></script> <script src="/javascripts/effects.js" type="text/javascript"></script> <script src="/javascripts/dragdrop.js" type="text/javascript"></script> <script src="/javascripts/controls.js" type="text/javascript"></script> <script src="/javascripts/map.js" type="text/javascript"></script> <script src="/javascripts/application.js" type="text/javascript"></script>
Como podemos ver, parece que este helper hace que el application.js sea el último en cargarse, lo cual puede tener su lógica, pero no deja de ser una curiosidad.

Xavier Noria dijo
Hey! He mirado el código de expand_javascript_sources(sources) en asset_tag_helper.rb y creo que se trata de un despiste.
Verás que ese método tiene un case con una rama por la que se entra si existe :defaults. Si es el caso expande @@javascript_default_sources en sources y borra :defaults. Luego, si existe "application.js" hace un append en sources.
Parece que la intención es añadir application.js sólo si existe, eso bien, pero tal como está escrito creo que asume (sin motivo que se me pueda ocurrir) que :defaults es el último elemento en sources. Yo diría que es un bug.
10 Marzo 2008 | 10:50 AM