如何在 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 插件?

如何访问 Grails 中的两个数据库

如何从 Grails 服务 (JPA + GAE) 中访问 EntityManager

在 Grails 中,如何访问域类静态方法中的休眠会话?

grails Grails 单元测试中的应用程序访问