如何在Grails的js文件中应用GString插值

时间:2016-09-10 02:07:32

标签: javascript grails gstring

我的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的内联变量。

感谢。

2 个答案:

答案 0 :(得分: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 :(得分: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>