0

私のGSPファイル(Grails 3.1.10):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <asset:javascript src="jquery-2.2.0.min.js"/>
    <asset:javascript src="myfile.js"/>
</head>
<body>
    <span id="greeting"></span>

</body>
</html>

myfile.js:

greeting = "${resp}"; // resp is passed from controller
$(document).ready(function(){
    $('#greeting').val(greeting);
});

まあ、すべての grails 開発者は、myfile.js を GSP ファイルに移動すれば機能することを知っていると信じています。

ただし、スタンドアロンの js ファイルが GString のインライン変数を正しく処理できるようにする方法を知りたいです。

ありがとう。

4

2 に答える 2

2

以下は、あなたと同じ問題に遭遇したときに私が従ったアプローチです。

次の方法で GString 変数を外部 JS に渡します。

外部 JS に以下の関数を追加します。

function view_handler_function(greetingValue){

    //assign the value to your element
    $('#greeting').val(greetingValue);

    .....
    //Your other handling code
}

ビューから関数を呼び出す

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <asset:javascript src="jquery-2.2.0.min.js"/>
    <asset:javascript src="myfile.js"/>
</head>
<body>
    <span id="greeting"></span>

    <script>
        var greeting = "${resp}"; // resp is passed from controller
        $(document).ready(function(){

            //call to your external function 
            view_handler_function(greeting);
        });
    </script>
</body>
</html>

注:これはあなたが探している正確な答えかもしれませんし、そうでないかもしれませんが、私がたどる方法は1つだけです。

于 2016-09-10T06:42:09.967 に答える
1

これはすぐに使用できるものではなく、良い考えでもありません (もちろん、コントローラ アクションを javascript src として使用し、そのアクションで js ファイルを読み込んで、そのコンテンツを simpleTemplateEngine などを介して実行することもできます)。

js ファイルを gstrings/他のテンプレートのように解釈するということは、キャッシング (アセット パイプライン、cdn 配布、およびブラウザー キャッシングによるバンドル ファイル) を無効にする必要があることを意味します。

ただし、単純に js ファイルを静的に提供することもできます。たとえば、動的入力をインライン JavaScript のグローバル変数として (たとえば、レイアウトから) 提供することもできます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <span id="greeting"></span>
    <g:javascript>
      var greeting = "${resp}";
    </g:javascript>
    <asset:javascript src="jquery-2.2.0.min.js"/>
    <asset:javascript src="myfile.js"/>
</body>
</html>
于 2016-09-10T06:42:32.013 に答える