javascript - 从 Controller 到外部 .js 文件的 Grails.pass 参数?

标签 javascript grails

我有 Controller :

package plugin

class TestController {

def simply = {[name:new Date()]}
}

如你所见,我传递了参数 name

我的查看页面:

<html>
<head>
<!-- <script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DFF">-->

<g:javascript>
    alert("${name}")
</g:javascript>
</head>
<body>
</body>
</html>

此页面运行正确 - 加载后我看到带有当前日期的警报窗口:)

但是,当

查看页面:

<html>
<head>
<script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DF">
</script>
</head>
<body>
</body>
</html>

和外部 simply.js 文件:

alert("${name}")

我看到空的警报窗口。那么,我的问题是:如何将参数传递给 external.js 文件?

最佳答案

当 View 显示给用户时,解析 View 有两个阶段。状态一是服务器执行 View 页面中包含的任何代码。在你的情况下

${name}

转换为当前日期,因为这是来自 Controller 的值。这意味着发送到用户浏览器的文本包含 3/2/2010 而不是 ${name}

用户访问 View 时发生的第二个阶段是浏览器解析 HTML。发送到浏览器的 HTML 取决于服务器上发生的事情。由于在您的示例中,JavaScript 包含在 View 中,因此 ${name} 被替换为服务器上的当前日期。然后包含 3/3/2010 的 JavaScript 被发送到浏览器,因为 ${name} 在服务器上被替换为 3/3/2010。这意味着弹出框将包含 3/3/2010。如果您包含外部 JavaScript 文件,它们永远不会通过第一步运行,因为浏览器直接下载它们并且不会向服务器发出请求。这意味着第一步永远不会发生,因此 $[name} 不会被 Controller 中的值替换。此行为与您使用的天气相同

<script>

<g:javascript>

标签。 为了将值从 View 传递到位于外部文件中的 JavaScript,如果您希望传递参数,您应该将 JavaScript 定义为外部文件中的函数。例如在 external.js 中

Function dispDate(theParam)
{
Alert(theParam);
}

然后从你的 Angular 来看

<g:javascript src="external.js" />
<script type="text/JavaScript">
dispDate(“${name}”);
 </script>

external.js存放在web-app/js目录下

关于javascript - 从 Controller 到外部 .js 文件的 Grails.pass 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4314373/

相关文章:

grails - Grails Spring Security SecUser

grails - 从Grails中的 'web-app/file/misc'解析 'src'的路径

grails - SQL查询结果未显示在Grails View 中

grails - Windows 2008 R2 tomcat 7中有多个 war 文件

Javascript 将多个值添加到属性

javascript - 我应该使用单个对象还是单个值作为 Angular 指令中的属性?

javascript - 为什么 element.style.left 返回 NaN?

javascript - 在 Javascript 字符串中查找单词

javascript - GC 导致 QML 应用程序崩溃

database - 在 Grails 中存储和编辑键/值对?