2015-10-25 4 views
0

Я искал это, но не могу найти правильное решение. Я немного опустил это и посмотрю, где я ошибаюсь.Grails GSP доступ к переменным в скрипте

Я использую Grails для проекта, и я действительно наслаждаюсь им. Где я думаю, что трудно обойти это в GSP.

Может кто-нибудь сказать мне дано:

Контроллер:

def index() 
{ 
    def message = "This is a test" 
    [message: message] 
} 

В целях

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

      HOW DO YOU ACCESS THAT VARIABLE IN HERE 

     }); 

<body></body> 
</html> 

Я пытаюсь накормить некоторые 3 участника яваскрипта ЛИЭС и я имеющий вопрос, пытаясь понять это. Да, я могу вручную использовать его или использовать стороннюю библиотеку для вызова ajax thingy. Тем не менее, я думал, что для этого есть способ гравировки, так что мне не нужно делать такой тяжелый подъем. Я имею в виду, что вы знаете, что вы используете его над скриптом {} и делаете все вещи глобальными? Просто пытаюсь понять, каков правильный способ сделать это.

Пример библиотеки, которую я использую, представляет собой библиотеку JQwidgets, которая имеет вызовы ajax, но я предпочел бы передать массивы и так непосредственно через именованные действия в Grails.

+2

'$ (документ) .ready (функция() {вар что-то =" $ {message} ";}' Предполагается, что GSP, который визуализируется, представляет собой представление из метода контроллера 'index'. Таким образом,' model' в 'view' доступен для GSP, когда страница компилируется и отображается. –

ответ

-1

Хорошо, так как это привело меня к пути к ответу.

Ключ должен был положить кодек stmt в верхней части gsp.

Я не могу не думать, что я взламываю это вместе. Всякий раз, когда я кодирую «google», я обнаруживаю, что Im не следует тому, что сделает «pro». На данный момент это, казалось, решило эту проблему.

контроллер

def index() { 

    def configtree = ConfigTree.list() 
    [message: configtree as JSON] 
} 


<%@page expressionCodec="none" %> 
<!DOCTYPE html> 

...

<script type="text/javascript"> 
    $(document).ready(function() { 
    var data = ${raw(message)}; 

    // prepare the data 
    var source = 
    { 
     datatype: "json", 
     datafields: [ 
      { name: 'id' }, 
      { name: 'parentid' }, 
      { name: 'text' }, 
      { name: 'icon' }, 
      { name: 'expanded' }, 
      { name: 'selected' }, 
      { name: 'iconsize' }, 
      { name: 'disabled' }, 
      { name: 'value' } 
     ], 
     id: 'id', 
     localdata: data 
    }; 

    var dataAdapter = new $.jqx.dataAdapter(source); 

    dataAdapter.dataBind(); 

    var records = dataAdapter.getRecordsHierarchy('id', 'parentid', 'items', [{ name: 'text', map: 'label'}]); 
+0

Всегда помните, что часть grails выполняется на сервере и javascript в браузере. Вот почему вы не можете получить доступ к переменным grails из представления (или переменные javascript из кода Grails). Комментарий @ joshua-moore - это способ сделать это. – Fernando

0

Вы можете написать так:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var message = "${message}"; 
      console.log("I'm from GSP", message); 
      $("input[selector]").val(message); // Just a dumb example 
     }); 
    </script> 
</head> 
<body> 
</body> 
</html> 
Смежные вопросы