Frage

Ich mag meine Ansichten in Grails in zwei Dateien eine .gsp-Datei und eine JS-Datei teilen, so dass ich eine sauberere Javascript Trennung von meinen Ansichten zu bekommen. Also hier ist ein Beispiel:

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

Aber wenn ich fügen Sie einfach den index.js Skriptverweis wie folgt aus:

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

alles, was ich bekommen, ist eine 404.

Hat jemand weiß, wie man damit umgehen?

Ein großer Vorteil wäre es, die Fähigkeit zu haben, Ansichtsdaten innerhalb der index.js Datei zu verwenden, um den gewünschten Inhalt zu erzeugen.

Matthias.

War es hilfreich?

Lösung

Eigentlich sollte es durchaus möglich sein, eine JS-Datei (oder eine beliebige andere Dateitypen) als GSP aus Ihrem grails-app/views/ Verzeichnis zu dienen. Das einzige, was Sie tun müssen, ist ein passendes URL-Mapping für die GSPs definieren, z.

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

Mit diesem URL-Mapping können Sie Ihren JS-Code in grails-app/views/home/index.js.gsp (beachten Sie die hintere .gsp) setzen und Sie Grails-Tags in Ihrer JS Quelle verwenden können. Um sicherzustellen, dass Ihre JS mit dem richtigen Inhaltstyp geliefert wird, möchten Sie vielleicht platzieren

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

zu Beginn des GSP.

Leider ist der createLink-Tag unterstützt keine Verbindung zu Ansichten Umschreiben, aber es sollte Ihren eigenen Tag zu schreiben, einfach sein, diese Verbindungen zu erstellen.

Wie auch immer, im Kopf behalten, dass dies nicht eine sehr positive Auswirkungen auf die App-Leistung haben. Es ist in der Regel besser auf statische JS-Dateien (und auch sich als statische Ressourcen dienen), während dynamische Sachen als Parameter an JS-Funktionen vorbei zum Beispiel. Dies wird auch halten Sie von einigen Kopfschmerzen WRT. Caching etc.

Andere Tipps

Update 2:

Grails die Möglichkeit Einhaken in den Build-Lebenszyklus bietet mit benutzerdefinierte Ereignisse .

Ein Event-Handler geschrieben werden kann, welche alle Javascript-Dateien unter grails-app/views mit dem Zielordner web-app/js synchronisiert.

Setzen Sie den benutzerdefinierten Code in $ PROJECT / scripts / Events.groovy. Die PackagingEnd ist ein gutes Ziel für den Aufruf, da es geschieht direkt nach web.xml erzeugt wird.

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

Aktualisieren

Wenn Sie die Javascript-Dateien möchten einfach ‚verzahnt‘ zusammen, können Sie tun, dass symbolische Links verwenden, z.

Grails-app / views / view1 / index.js -> Webapp / js / view1 / index.js

Soweit ich weiß, gibt es keine Möglichkeit, Grails zwingen direkt Inhalte zu dienen, die außerhalb des Web-App ist.

Alternativ können Sie Sie Javascript inline, aber das kann Auswirkungen auf die Leistung haben.


Javascript-Dateien gehören unter web-app/js.

Dann können Sie diese Referenz <g:javascript src="index.js" /> verwendet wird.

Die Idee ist gut, aber Grails hat einen Grund, diese Verzeichnisstruktur. Die Ansicht Ordner für einen bestimmten Artefakt-Typen bestimmt (Ansichten) ..

Sie können Ihre Ansicht Ordnerstruktur unter web-inf klonen, aber das gibt Ihnen mehr Arbeit als ich die Idee dahinter erraten ist in der Nähe der Bequemlichkeit halber Gründe zusammen zugehörige Dateien zu halten.

Auch wenn ich nicht zu aufgeregt über Javascript zusammen mit der Ansicht zu speichern wir Roberts Idee Einhaken in den Build-Prozess geliebt von den Ereignissen bauen kopieren Javascript Quellen in das richtige Verzeichnis mit! Wenn Sie diesen Weg zu gehen entscheiden, könnten Sie auch die Quellen komprimieren, während Sie gerade dabei sind. ShrinkSafe ist beliebt Bibliothek.

Ich glaube nicht, dass Sie den Zugriff auf js Innenansichten erlaubt /

Wenn Sie tun müssen, dass ... hier ist der Trick

  1. Erstellen Sie Ihre js und benennen Sie sie mit myjs.gsp (use "") iniside _myjs.gsp geben Sie js
... aufschreiben Sie js hier ...
  1. Sie innerhalb GSP (zum Beispiel: index.gsp, view.gsp, usw.) geben Sie diesen Tag, das Sie js hochladen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top