Grails:ビューフォルダー内のJavascriptファイル
-
06-07-2019 - |
質問
Grailsでのビューを.gspファイルと.jsファイルの2つのファイルに分割して、ビューからJavascriptをよりきれいに分離したいと思います。以下に例を示します:
views/index.gsp
views/index.js
views/home/index.jsp
views/home/index.js
ただし、次のようにindex.jsスクリプト参照を追加するだけの場合:
<script src="index.js" type="text/javascript"></script>
取得するのは404のみです。
これに対処する方法を知っている人はいますか
大きな利点は、index.jsファイル内でビューデータを使用して目的のコンテンツを作成できることです。
マティアス。
解決
実際には、grails-app/views/
ディレクトリからGSPとしてJSファイル(またはその他のファイルタイプ)を提供することは完全に可能です。あなたがしなければならない唯一のことは、それらのGSPに適切なURLマッピングを定義することです、例えば:
"/javascript/home/index"(view:'/home/index.js')
このURLマッピングを使用すると、JSコードをgrails-app/views/home/index.js.gsp
(末尾の.gspに注意)に配置でき、JSソースでgrailsタグを使用できます。 JSが正しいコンテンツタイプで配信されるようにするには、配置することをお勧めします
<%@ page contentType="text/javascript"%>
GSPの先頭。
残念ながら、createLink
タグはビューへのリンクの書き換えをサポートしていませんが、独自のタグを作成してそれらのリンクを作成するのは簡単です。
とにかく、これはアプリのパフォーマンスにあまり良い影響を与えないことに注意してください。通常、動的なものをパラメーターとしてJS関数に渡す際に、静的なJSファイルを保持する(およびそれらを静的なリソースとして提供する)方が良いでしょう。これにより、頭痛の種からも逃れることができます。キャッシュなど。
他のヒント
更新2:
Grailsは、カスタムイベント。
grails-app/views
の下のすべてのjavascriptファイルをweb-app/js
のターゲットフォルダーと同期するイベントハンドラーを作成できます。
カスタムコードを$ PROJECT / scripts / Events.groovyに配置します。 PackagingEnd
は、web.xml
が生成された直後に発生するため、呼び出しの適切なターゲットです。
eventPackagingEnd = { ->
// for each js file under grails-app/views move to web-app/js
}
更新
javascriptファイルを単に「メッシュ化」したい場合は、シンボリックリンクを使用して実行できます。例:
grails-app / views / view1 / index.js-<!> gt; webapp / js / view1 / index.js
私が知る限り、web-appの外部にあるコンテンツを直接杯に強制する方法はありません。
別の方法として、javascriptをインライン化することもできますが、パフォーマンスに影響する可能性があります。
Javascriptファイルは<g:javascript src="index.js" />
に属します。
その後、<=>を使用して参照できます。
アイデアは良いのですが、Grailsにはこのディレクトリ構造があるのには理由があります。ビューフォルダーは、特定のアーティファクトタイプ(ビュー)を対象としています。
web-infの下でビューフォルダー構造を複製することもできますが、その理由は、利便性の理由から関連ファイルを近くに保つことだと思うので、より多くの作業ができます。
ビューと一緒にJavascriptを保存することに興奮していませんが、ビルドイベントを使用してjavascriptソースを適切なディレクトリにコピーすることで、ビルドプロセスにフックするというRobertのアイデアが気に入りました!その道を進むことに決めた場合は、ソースにいる間にソースを圧縮することもできます。 ShrinkSafe は人気のあるライブラリです。
ビュー内のjsへのアクセスが許可されているとは思わない/
それを行う必要がある場合...ここにトリックがあります
- jsを作成し、 myjs.gspで名前を変更します(<!> quot; <!> quot;を使用) iniside _myjs.gspあなたがjsを入力
- gsp内(たとえば、index.gsp、view.gspなど) このタグを入力してjsをアップロードします