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开发人员都知道,如果我把我的file.js移到我的GSP文件中,它就会工作。
然而,我希望知道如何让独立的js文件可以正确处理GString的内联变量。
谢谢。
当我遇到和你一样的问题时,我采用了下面的方法。
通过以下方式将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>
注意:这可能是也可能不是你正在寻找的确切答案,但只是一种方式,我遵循
这是开箱即用的根本不可能,这也不是一个好主意(当然,你可以使用一个控制器动作作为javascript src,并在该动作读取在js文件和运行它的内容通过例如simpleTemplateEngine)
让js文件像gstring/其他模板一样被解释意味着任何缓存(通过资产管道,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>