Pergunta

Existem essencialmente 2 lugares para definir funções JavaScript em Grails, diretamente em um elemento sobre o SPG, e dentro de um arquivo de origem javascript separado sob / web-app / js (por exemplo, application.js). Nós definimos uma função javascript comumente reutilizados dentro application.js, mas também precisa ser capaz de gerar partes da função dinamicamente usando o código Groovy. Infelizmente, $ {algum código Groovy} não parece ser processadas dentro de arquivos de origem javascript separadas.

É a única maneira de fazer isso definindo a função javascript dentro de um tag de script em uma página GSP, ou há uma solução mais geral? Obviamente, poderíamos definir a função JavaScript em uma tag de script dentro de um arquivo GSP modelo que seria reutilizado, mas há um monte de impulso para manter nossas funções javascript definido todos reunidos no mesmo lugar (ou seja, o arquivo de origem javascript externo). Isto tem benefícios de desempenho, bem como (os arquivos de origem JavaScript são geralmente apenas baixado uma vez pelo navegador de cada cliente, em vez de recarregar as mesmas funções JavaScript dentro da fonte de cada página html que visita). Tenho brincado ao redor com a idéia de quebrar a função em pedaços estáticos e dinâmicos, colocando as estáticas na fonte externa e colocar as dinâmicas no modelo GSP, em seguida, colando-os, mas este parece ser um corte desnecessário.

Todas as idéias?

(edit: Pode soar como a idéia de gerar dinamicamente partes de uma função JavaScript, que é então transferido uma vez e usado uma e outra vez pelo cliente, seria uma má ideia No entanto, a peça que é "dinâmico. "só muda talvez uma vez por semana ou mês, e apenas muito ligeiramente. Principalmente nós só quero esta peça gerado fora do banco de dados, mesmo se apenas uma vez, em vez de codificado.)

Foi útil?

Solução

Uma solução fácil para manter seu discreto JavaScript é criar um JavaScriptController e mapear suas ações "/ js / *" adicionando isso ao seu arquivo UrlMappings.groovy:

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

em seguida, basta criar uma ação para cada arquivo JS dinâmica quiser, incluir no em seu layout , e pronto, você tem um arquivo JS que você pode inserir trechos de Grails em! :)

Nota: Descobri que não há atualmente um bug no Grails que não mapeia extensões de arquivo para tipos de conteúdo corretamente, então você vai precisar incluir <%@ page contentType="text/javascript; UTF-8" %> na parte superior do seu ponto de vista arquivos.

Outras dicas

Esta é uma grande solução. Eu gostaria de oferecer uma sugestão para usar somthing outra, em seguida, um mapeamento de

"/js/$action" 
porque isso não vai lhe permitir acesso que arquivos javascript in / web-app / js /. Todos os seus arquivos javascript teria que ser movido para um diretório seu controlador seria apontar.

Gostaria de usar algo como

"/dynjs/$action"

Desta forma, você ainda pode apontar para arquivos na web-app / / js / arquivos com o conflito e desfrutar dos beneficios de marcas gsp em arquivos javascript

Por favor me corrija se eu estiver errado.

Ou isso ... tem um serviço de método dinâmico tag / / que permite que as tags escrever sua JS + CSS + qualquer outra coisa, a um "cache", que é usado para construir os recursos CSS JS + por um controlador diferente.

conceito completa aqui: [ http://www.anyware.co.uk/2005/2009/01/19/an-idea-to-give-grails-tags-esp/] [1]

Se você quiser usar modelos criados pelo controlador (essa página HTML processado que referenciar o Javascript em que você pretende usar código Groovy) no código Javascript, então você pode usar esta técnica:

Esta técnica não precisa mapeamentos de URL de mudança e não requer que você crie controlador extra.

Na sua opinião GSP add javascript como se segue:

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

Em vista pasta Crie uma pasta "javascript". E criar um arquivo chamado: _yourJavascriptFile.gsp

Você não pode apenas usar todo o código GSP em seu arquivo _yourJavascriptFile.gsp, mas você também pode usar todos os modelos criados em seu controlador (que está tornando a vista).

NOTA: Não há nada de especial sobre pasta javascript. Você pode nomear qualquer coisa que quiser ou usar uma pasta vista existente. Esta é apenas uma questão de organizar e identificar o seu HTML cuspir GSP de GSPs cuspir Javascript. Alternativamente, você pode usar algumas convenções de nomenclatura como:. _Something.js.gsp etc

Nome seus scripts como este

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

O interior código gsp será processado corretamente pelo Grails. Isso funciona, mas eu não tenho idéia se ele é considerado uma boa idéia ou não.

Não há outra maneira - Passar para o código gerado em uma função que espera encerramentos. Esses fechamentos é gerada pelo programa de curso. O código gerado é, naturalmente, inlined / script-marcado na página gsp.

ela pode ou não funcionar, dependendo da natureza do código que está sendo gerado. Mas eu suspeito que ele vai trabalhar, e se isso não acontecer, pequenos ajustes ao estilo de codificação do seu javascript vai certamente fazer o trabalho. No entanto, se estes mudança doesnt código 'gerado' muito, isso muito exagero imo.

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