Как я могу получить доступ к переменной Grails в JavaScript? - PullRequest
4 голосов
/ 18 ноября 2011

У меня есть переменная в моем приложении Grails BootStrap.groovy:

      class BootStrap {
      def init = { servletContext ->
      def testGrails = "11"

Я хочу показать JavaScript alert(), если это тестовое значение равно 11.

Мой JavaScript:

           <SCRIPT LANGUAGE="JavaScript">
           if(testGrails==11)   // WHAT TO WRITE WITH IN THE BRACKETS ...?
           {
               alert("yes");
           }        

Как я могу получить доступ к классу Grails в Javascript для выполнения вышеуказанного?

Спасибо.

Ответы [ 3 ]

10 голосов
/ 18 ноября 2011

Прежде всего - вы должны сделать эту переменную доступной из других мест. В настоящее время он ограничен областью действия 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]
}

и используйте его в GSP как

<g:javascript>
       if(${testGrails}==11)   
       {
           alert("yes");
       }    
</g:javascript>
2 голосов
/ 18 ноября 2011

Вы должны определить свою переменную в Config.groovy, а не в Bootstrap.Затем вы можете получить к нему доступ в файлах gsp, например:

       <SCRIPT LANGUAGE="JavaScript">
       if(${grailsApplication.config.testGrails}==11)
       {
           alert("yes");
       }        
1 голос
/ 13 декабря 2013

Вы уверены, что вам это нужно в 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 об этом немного скудна, но здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...