Domanda

Vorrei dividere le mie visualizzazioni in Grails in 2 file, un file .gsp e un file .js in modo da ottenere una separazione Javascript più pulita dalle mie visualizzazioni. Quindi, ecco un esempio:

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

Ma quando aggiungo semplicemente il riferimento allo script index.js in questo modo:

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

tutto quello che ottengo è un 404.

Qualcuno sa come gestirlo?

Un grande vantaggio sarebbe la possibilità di utilizzare i dati di visualizzazione all'interno del file index.js per produrre il contenuto desiderato.

Matthias.

È stato utile?

Soluzione

In realtà, dovrebbe essere perfettamente possibile pubblicare un file JS (o qualsiasi altro tipo di file) come SPG dalla directory grails-app/views/. L'unica cosa che devi fare è definire un mapping URL adatto per tali SPG, ad esempio:

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

Con questa mappatura URL, puoi inserire il tuo codice JS in grails-app/views/home/index.js.gsp (nota il .gsp finale) e puoi usare qualsiasi tag grails nella tua sorgente JS. Per assicurarti che il tuo JS sia consegnato con il tipo di contenuto corretto, potresti voler posizionare

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

all'inizio del tuo SPG.

Sfortunatamente, il tag createLink non supporta la riscrittura dei collegamenti alle viste, ma dovrebbe essere facile scrivere il proprio tag per creare quei collegamenti.

Tuttavia, tieni presente che ciò non avrà un impatto molto positivo sulle prestazioni della tua app. Di solito è meglio avere file JS statici (e anche servirli come risorse statiche) mentre si passano elementi dinamici come parametri alle funzioni JS, ad esempio. Questo ti terrà anche lontano da alcuni mal di testa. memorizzazione nella cache ecc.

Altri suggerimenti

Aggiornamento 2:

I grails offrono la possibilità di collegarsi al ciclo di vita della compilazione usando eventi personalizzati .

È possibile scrivere un gestore eventi che sincronizzi tutti i file javascript in grails-app/views con la cartella di destinazione web-app/js.

Posiziona il codice personalizzato in $ PROJECT / scripts / Events.groovy. PackagingEnd è un buon obiettivo per l'invocazione, poiché si verifica subito dopo la generazione di web.xml.

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

Aggiorna

Se desideri che i file javascript vengano semplicemente "messi in mesh" insieme, puoi farlo utilizzando i collegamenti simbolici, ad es .:

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

Per quanto ne so, non c'è modo di forzare i graal a servire direttamente i contenuti al di fuori della web-app.

In alternativa puoi incorporare javascript, ma ciò può avere implicazioni sulle prestazioni.


I file Javascript appartengono a <g:javascript src="index.js" />.

Quindi puoi fare riferimento a loro usando <=>.

L'idea è buona, ma Grails ha questa struttura di directory per un motivo. La cartella della vista è destinata a un determinato tipo di artefatto (viste) ..

Potresti clonare la struttura della cartella di visualizzazione in web-inf, ma questo ti dà più lavoro poiché immagino che l'idea alla base sia quella di mantenere i file correlati vicini per motivi di convenienza.

Anche se non sono entusiasta di archiviare Javascript insieme alla vista, ho adorato l'idea di Robert di collegarmi al processo di compilazione usando gli eventi di compilazione per copiare le fonti javascript nella directory giusta! Se decidi di percorrere quella strada potresti anche comprimere le fonti mentre ci sei. ShrinkSafe è una libreria popolare.

Non credo che ti sia permesso accedere a js all'interno delle viste /

se devi farlo ... ecco il trucco

  1. crea il tuo js e rinominalo con myjs.gsp (usa " ") iniside _myjs.gsp digita js
... scrivi qui js ...
  1. dentro di te gsp (ad esempio: index.gsp, view.gsp, ecc.) digitare questo tag per caricare js

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top