Pregunta

Me gustaría dividir mis vistas en Grails en 2 archivos, un archivo .gsp y un archivo .js para obtener una separación Javascript más limpia de mis vistas. Así que aquí hay un ejemplo:

views/index.gsp
views/index.js
views/home/index.jsp
views/home/index.js

Pero cuando simplemente agrego la referencia de script index.js de esta manera:

<script src="index.js" type="text/javascript"></script>

todo lo que obtengo es un 404.

¿Alguien sabe cómo lidiar con esto?

Un gran beneficio sería tener la capacidad de usar los datos de vista dentro del archivo index.js para producir el contenido deseado.

Matthias.

¿Fue útil?

Solución

En realidad, debería ser perfectamente posible servir un archivo JS (o cualquier otro tipo de archivo) como GSP desde su directorio grails-app/views/. Lo único que tiene que hacer es definir una asignación de URL adecuada para esos GSP, por ejemplo:

"/javascript/home/index"(view:'/home/index.js')

Con esta asignación de URL, puede poner su código JS en grails-app/views/home/index.js.gsp (tenga en cuenta el .gsp final) y puede usar cualquier etiqueta de grial en su fuente JS. Para asegurarse de que su JS se entregue con el tipo de contenido correcto, puede colocar

<%@ page contentType="text/javascript"%>

al comienzo de su GSP.

Desafortunadamente, la etiqueta createLink no admite la reescritura de enlaces a las vistas, pero debería ser fácil escribir su propia etiqueta para crear esos enlaces.

De todos modos, tenga en cuenta que esto no tendrá un impacto muy positivo en el rendimiento de su aplicación. Por lo general, es mejor tener archivos JS estáticos (y también servirlos como recursos estáticos) mientras se pasan cosas dinámicas como parámetros a las funciones JS, por ejemplo. Esto también te mantendrá alejado de algunos dolores de cabeza. almacenamiento en caché, etc.

Otros consejos

Actualización 2:

Grails ofrece la posibilidad de engancharse al ciclo de vida de la compilación utilizando eventos personalizados .

Se puede escribir un controlador de eventos que sincronice todos los archivos de JavaScript en grails-app/views con la carpeta de destino de web-app/js.

Coloque el código personalizado en $ PROJECT / scripts / Events.groovy. El PackagingEnd es un buen objetivo para la invocación, ya que ocurre justo después de que se genera web.xml.

eventPackagingEnd = {  ->
     // for each js file under grails-app/views move to web-app/js
}

Update

Si desea que los archivos javascript simplemente se combinen, puede hacerlo usando enlaces simbólicos, por ejemplo:

grails-app / views / view1 / index.js - > webapp / js / view1 / index.js

Hasta donde yo sé, no hay forma de obligar a los griales a servir directamente el contenido que está fuera de la aplicación web.

Alternativamente, puede incorporar su javascript, pero eso puede tener implicaciones de rendimiento.


Los archivos Javascript pertenecen a <g:javascript src="index.js" />.

Entonces puede hacer referencia a ellos usando <=>.

The idea is good, but Grails has this directory structure for a reason. The view folder is intended for a certain artifact type (views)..

You could clone your view folder structure under web-inf, but that gives you more work as I guess the idea behind this is to keep related files close together for convenience reasons.

Even though I'm not to excited about storing Javascript together with the view I loved Robert's idea of hooking into the build process by using build events to copy javascript sources into the right directory! If you decide to go down that road you might as well compress the sources while you're at it. ShrinkSafe is popular library.

I don't think you are allowed to access js inside views/

if you need to do that ... here is the trick

  1. create your js and rename it with myjs.gsp (use "") iniside _myjs.gsp type you js
... write down you js in here ...
  1. inside you gsp (for example: index.gsp, view.gsp, etc) type this tag to upload you js

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top