Pergunta

Eu gostaria de dividir minhas opiniões em Grails em 2 arquivos um arquivo .gsp e um arquivo de js para que eu recebo um aspirador de Javascript separação de meus pontos de vista. Então, aqui está um exemplo:

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

Mas quando eu simplesmente adicionar a referência de script index.js assim:

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

Tudo que eu vejo é um 404.

Alguém sabe como lidar com isso?

Um grande benefício seria ter a capacidade de dados de uso vista dentro do arquivo index.js para produzir o conteúdo desejado.

Matthias.

Foi útil?

Solução

Na verdade, ele deve ser perfeitamente possível servir um arquivo JS (ou qualquer outro tipo de arquivo) como um GSP do seu diretório grails-app/views/. A única coisa que você tem que fazer, é definir um mapeamento URL adequado para aquelas GSPs, por exemplo:.

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

Com este mapeamento de URL, você pode colocar seu código JS em grails-app/views/home/index.js.gsp (note a .gsp arrastando) e você pode usar quaisquer etiquetas Grails em sua fonte JS. Para garantir que seu JS é entregue com o tipo de conteúdo correto, você pode querer colocar

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

no início do seu GSP.

Infelizmente, a tag createLink não suporta ligação reescrever a vista, mas deve ser fácil de escrever sua própria tag para criar esses links.

De qualquer forma, tenha em mente que isso não terá um impacto muito positivo sobre o desempenho do seu aplicativo. Geralmente é melhor ter JS arquivos estáticos (e também servi-los como recursos estáticos) ao passar o material dinâmico como parâmetros para funções JS por exemplo. Isso também irá mantê-lo de algumas dores de cabeça wrt. caching etc.

Outras dicas

Update 2:

Grails oferecem a possibilidade de ligar para o ciclo de vida de compilação usando eventos personalizados .

Um manipulador de eventos pode ser escrito que sincroniza todos os arquivos javascript sob grails-app/views com a pasta de destino de web-app/js.

Coloque o código personalizado em $ PROJECT / scripts / Events.groovy. O PackagingEnd é um bom alvo para a invocação, uma vez que acontece logo após web.xml é gerado.

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

Atualizar

Se você gostaria que os arquivos de javascript simplesmente 'malha' juntos, você pode fazer isso usando links simbólicos, por exemplo:.

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

Tanto quanto eu sei não há nenhuma maneira de forçar grails para servir diretamente o conteúdo que está fora do web-app.

Como alternativa, você pode embutidos Você javascript, mas que pode ter implicações de desempenho.


arquivos Javascript pertencem sob web-app/js.

Em seguida, você pode referenciá-los usando <g:javascript src="index.js" />.

A idéia é boa, mas Grails tem essa estrutura de diretório por uma razão. A pasta vista destina-se a um certo tipo de artefato (visitas) ..

Você pode clonar a estrutura de pastas vista sob WEB-INF, mas que lhe dá mais trabalho que eu acho que a idéia por trás disso é a de manter os arquivos relacionados juntos por razões de conveniência.

Mesmo que eu não sou a animado sobre o armazenamento de Javascript juntamente com o ponto de vista Eu amei a ideia de Robert de ligar para o processo de compilação usando eventos de compilação para copiar fontes javascript no diretório certo! Se você decidir ir por esse caminho assim como você pode comprimir as fontes, enquanto você está nisso. ShrinkSafe é uma biblioteca popular.

Eu não acho que você está autorizado a vista dentro de acesso js /

Se você precisa fazer isso ... aqui é o truque

  1. criar seus js e renomeá-lo com myjs.gsp (use "") iniside _myjs.gsp tipo você js
... escrever para baixo você js aqui ...
  1. dentro de você SPG (por exemplo: index.gsp, view.gsp, etc) digitar essa tag para carregar você js

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top