如何在 Grails 中的 js 文件中应用 GString 插值
How to apply GString interpolation in a js file in Grails
我的 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的内联变量。
谢谢。
以下是我在 运行 遇到与您相同的问题时所采用的方法。
通过以下方式将您的 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 文件解释为 gstrings/other 模板意味着必须禁用任何缓存(通过资产管道、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>
我的 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的内联变量。
谢谢。
以下是我在 运行 遇到与您相同的问题时所采用的方法。
通过以下方式将您的 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 文件解释为 gstrings/other 模板意味着必须禁用任何缓存(通过资产管道、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>