3

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ファイル内のビューデータを使用して目的のコンテンツを生成できることです。

マティアス。

4

4 に答える 4

4

実際、JS ファイル (またはその他のファイル タイプ) をgrails-app/views/ディレクトリから GSP として提供することは完全に可能です。あなたがしなければならない唯一のことは、それらの 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 ファイルを用意する (さらにそれらを静的リソースとして提供する) 方が適切です。これにより、いくつかの頭痛の種からも解放されます。キャッシングなど

于 2009-06-20T22:47:00.950 に答える
0

アップデート2:

Grailsは、カスタムイベントを使用してビルドライフサイクルにフックする可能性を提供します。

の下のすべてのJavaScriptファイルgrails-app/viewsをのターゲットフォルダーと同期するイベントハンドラーを作成できます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 -> webapp/js/view1/index.js

私の知る限り、ウェブアプリの外部にあるコンテンツを直接配信するようにgrailsに強制する方法はありません。

または、JavaScriptをインライン化することもできますが、パフォーマンスに影響を与える可能性があります。


JavaScriptファイルはに属しますweb-app/js

次に、を使用してそれらを参照できます<g:javascript src="index.js" />

于 2009-06-20T20:01:14.530 に答える
0

ビュー内でjsにアクセスすることは許可されていないと思います/

あなたがそれをする必要があるなら...ここにトリックがあります

  1. js を作成し、名前をmyjs.gsp に変更します (" " を使用) inside _myjs.gsp type you js
...ここにあなたのjsを書き留めてください...
  1. gsp 内 (例: index.gsp、view.gsp など) にこのタグを入力して、js をアップロードします。

于 2009-06-25T04:52:03.003 に答える
0

アイデアは良いのですが、Grails がこのディレクトリ構造になっているのには理由があります。ビュー フォルダーは、特定のアーティファクト タイプ (ビュー) を対象としています。

ビュー フォルダー構造を web-inf の下に複製することもできますが、この背後にあるアイデアは、便宜上の理由から関連ファイルを近くに保つことであると推測しているため、より多くの作業が必要になります。

Javascript をビューと一緒に保存することにあまり興奮していませんが、ビルド イベントを使用して JavaScript ソースを適切なディレクトリにコピーすることで、ビルド プロセスにフックするという Robert のアイデアが気に入りました。その道を進むことにした場合は、その途中でソースを圧縮することもできます。ShrinkSafeは人気のあるライブラリです。

于 2009-06-21T04:24:46.563 に答える