resumen qué que porque objetivos identificar como codigo archivo actualidad javascript grails groovy

javascript - que - qué es js



Ejecutando declaraciones geniales en fuentes de JavaScript en Grails (6)

En esencia, hay 2 lugares para definir funciones de JavaScript en Grails, directamente en un elemento en el GSP, y dentro de un archivo fuente de JavaScript separado en / web-app / js (por ejemplo, application.js). Hemos definido una función javascript comúnmente reutilizada dentro de application.js, pero también necesitamos poder generar partes de la función dinámicamente usando un código groovy. Desafortunadamente, $ {algún código groovy} no parece procesarse en archivos fuente de JavaScript separados.

¿Es la única forma de hacer esto definiendo la función javascript dentro de una etiqueta de script en una página GSP, o hay una solución más general? Obviamente, podríamos definir la función javascript en una etiqueta de script dentro de un archivo GSP de plantilla que se reutilizaría, pero hay mucho empuje para mantener nuestras funciones javascript definidas todas juntas en un solo lugar (es decir, el archivo fuente javascript externo). Esto también tiene beneficios de rendimiento (los archivos fuente de JavaScript usualmente solo se descargan una vez en el navegador de cada cliente, en lugar de volver a cargar las mismas funciones de JavaScript dentro de la fuente de cada página html que visitan). He jugado con la idea de dividir la función en piezas estáticas y dinámicas, colocar las estáticas en la fuente externa y poner las dinámicas en la plantilla GSP, luego unirlas, pero esto parece un truco innecesario.

¿Algunas ideas?

(editar: puede parecer una idea errónea la idea de generar partes dinámicas de una función de JavaScript, que luego se descarga una vez y el cliente la usa una y otra vez). Sin embargo, la pieza que es "dinámica" solo cambia tal vez una vez a la semana o al mes, y luego solo muy levemente. En su mayoría, solo queremos que esta pieza se genere fuera de la base de datos, aunque solo sea una vez, en lugar de estar codificada.)


Una solución fácil para mantener su JavaScript discreto es crear un JavaScriptController y asignar sus acciones "/ js / *" agregando esto a su archivo UrlMappings.groovy :

"/js/$action"{ controller = "javascript" }

entonces simplemente crea una acción para cada archivo JS dinámico que desees, incluye en tu diseño <HEAD>, y listo, ¡tienes un archivo JS en el que puedes insertar fragmentos de Grails! :)

Nota: descubrí que actualmente hay un error en Grails que no correlaciona las extensiones de archivo con los tipos de contenido, por lo que deberá incluir <%@ page contentType="text/javascript; UTF-8" %> en la parte superior de tus archivos de vista.


Hay otra forma: pasar el código generado a una función que espera cierres. Esos cierres son generados por el programa, por supuesto. El código generado es, por supuesto, inline / script-tagged en la página gsp.

puede o no funcionar dependiendo de la naturaleza del código que se genera. Pero sospecho que funcionará, y si no lo hace, ajustes menores en el estilo de codificación de su javascript definitivamente lo harán funcionar. Sin embargo, si este código ''generado'' no cambia mucho, es bastante exagerado.



Esta es una gran solución. Me gustaría ofrecer una sugerencia para usar algo más que un mapeo de

"/js/$action" porque esto ya no le permitirá acceder a sus archivos javascript en / web-app / js /. Todos sus archivos javascript tendrían que ser movidos al directorio al que su controlador apuntaría.

Yo usaría algo como

"/dynjs/$action"

De esta forma, aún puede apuntar a archivos en / web-app / js / files sin conflicto y disfrutar de los beneficios de las etiquetas gsp en los archivos javascript

Por favor corrígeme si estoy equivocado.


Si desea utilizar modelos creados por el controlador (esa página HTML renderizada que hace referencia al Javascript en el que tiene la intención de usar el código groovy) en el código JavaScript, puede utilizar esta técnica:

Esta técnica no necesita cambiar las asignaciones de URL y no requiere que cree un controlador adicional.

En su vista, GSP agrega javascript de la siguiente manera:

<script type="text/javascript"> <g:render template="/javascript/yourJavascriptFile"/> </script>

En la carpeta de vistas crea una carpeta "javascript". Y crea un archivo llamado: _yourJavascriptFile.gsp

No solo puede usar todo el código GSP en su archivo _yourJavascriptFile.gsp, sino que también puede usar todos los modelos creados en su controlador (que representa la vista).

NOTA: No hay nada especial acerca de la carpeta javascript. Puedes ponerle el nombre que quieras o usar una carpeta de vista existente. Esta es solo una cuestión de organizar e identificar su HTML escupiendo GSP desde Javascript escupiendo GSPs. Alternativamente, puede usar algunas convenciones de nombres como: _something.js.gsp, etc.


Nombre sus scripts como este

/wherever/the/js/files/are/thescript.js.gsp

El código gsp dentro será procesado correctamente por Grails. Esto funciona, pero no tengo idea si se considera una buena idea o no.