如何在 JavaScript 中访问 Grails 变量?
Posted
技术标签:
【中文标题】如何在 JavaScript 中访问 Grails 变量?【英文标题】:How can I access a Grails variable in JavaScript? 【发布时间】:2012-01-01 04:41:23 【问题描述】:我的 Grails 应用程序的 BootStrap.groovy
中有一个变量:
class BootStrap
def init = servletContext ->
def testGrails = "11"
如果此测试值为 11,我想显示 javascript alert()
。
我的 JavaScript:
<SCRIPT LANGUAGE="JavaScript">
if(testGrails==11) // WHAT TO WRITE WITH IN THE BRACKETS ...?
alert("yes");
如何在 Javascript 中访问 Grails 类来执行上述操作?
谢谢。
【问题讨论】:
【参考方案1】:首先 - 你必须让这个变量可以从其他地方访问。目前它的范围是init
。例如,您可以将其放入全局配置中(请参阅Config.groovy
)。或设置为服务。或者在某处创建一个public static
变量。
服务示例:
class VariableHOlderService
def testGrails
和
class BootStrap
VariableHolderService variableHolderService
def init = servletContext ->
VariableHolderService.testGrails = "11"
第二 - 您需要将其放入请求中。有两种方法 - 使用过滤器或控制器/动作。当您想使用来自不同 GSP 的相同变量时,第一个选项很有用。
从控制器它将是:
VariableHolderService variableHolderService
def myAction =
render model: [testGrails:variableHolderService.testGrails]
在普惠制中使用它
<g:javascript>
if($testGrails==11)
alert("yes");
</g:javascript>
【讨论】:
嗨,谢谢我和你提到的一样,所有四个,但在 gsp 警报中是:未定义......任何想法 谢谢伊戈尔! ...我更喜欢在 GSP(Sitemesh 布局)中包含 JS 变量: 【参考方案2】:您应该在 Config.groovy 中定义变量,而不是在 Bootstrap 中。然后你可以像这样在 gsp 文件中访问它:
<SCRIPT LANGUAGE="JavaScript">
if($grailsApplication.config.testGrails==11)
alert("yes");
【讨论】:
如何在外部javascript文件中使用$grailsApplication.config.testGrails? 我想您可以拥有一个 GSP 文件,其中包含您需要的所有变量,然后将其与 jQuery 一起包含在您需要访问变量的所有其他文件中。【参考方案3】:您确定在Bootstrap.groovy
中需要它吗?它是你计算出来的还是可以改变的?
如果您的回答是否定的,我发现meta
标签对于获取 GSP 文件中的信息非常有用。
例如,如果你想要你的应用程序名称,你可以这样获取:
<g:meta name="app.name"/>
您可以像这样在application.properties
文件中获取任何属性。
如果您像我一样需要将其连接到另一个值,这是我的示例。请记住,任何标签都可以用作没有g:
命名空间的方法。例如:
<g:set var="help" value="http://localhost:8080/$meta(name:"app.name")/help" />
关于这方面的 Grails 文档有点差,但它是 here。
【讨论】:
以上是关于如何在 JavaScript 中访问 Grails 变量?的主要内容,如果未能解决你的问题,请参考以下文章
Grails:如何将 javascript/ajax 放入 taglib 中?
在哪里放置,以及如何访问 Grails 应用程序中的 jQuery 插件?