質問

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へのアクセスが許可されているとは思わない/

それを行う必要がある場合...ここにトリックがあります

  1. jsを作成し、 myjs.gspで名前を変更します(<!> quot; <!> quot;を使用) iniside _myjs.gspあなたがjsを入力
...ここにjsを書き留めてください...
  1. gsp内(たとえば、index.gsp、view.gspなど) このタグを入力してjsをアップロードします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top