Как передать значение переменной JavaScript в контроллер Grails? - PullRequest
3 голосов
/ 14 декабря 2010

Я нашел следующий код JavaScript, чтобы получить размер окна браузера, и он прекрасно работает!

<script type="text/javascript">
<!--

 var viewportwidth;
 var viewportheight;

 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

 if (typeof window.innerWidth != 'undefined')
 {
      viewportwidth = window.innerWidth,
      viewportheight = window.innerHeight
 }

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
 else if (typeof document.documentElement != 'undefined'
    && typeof document.documentElement.clientWidth !=
     'undefined' && document.documentElement.clientWidth != 0)
 {
       viewportwidth = document.documentElement.clientWidth,
       viewportheight = document.documentElement.clientHeight
 }

 // older versions of IE
 else
 {
       viewportwidth = document.body.clientWidth,
       viewportheight = document.body.clientHeight
 }
document.write('<p>Your viewport width is <b>'+viewportwidth+'x'+viewportheight+'</b>.</p>');
//-->
</script>

Теперь мне нужно передать его на контроллер Grails, чтобы я мог изменить размер изображения в соответствии с размером экрана.

, который построен с использованием:

<div align="center" valign="middle">
<img src="${createLink(controller:'chart', action:'buildChart')}" />
</div>

Как я могу это сделать?Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Если вы решите использовать jQuery, вы можете написать контроллер, который возвращает ваше изображение, что-то вроде этого в html:

<img id="picture"/>
....
....
<g:javascript>
    // Load something when DOM is fully loaded
    $(document).ready(function() {
       var width = $(window).width()
       var height = $(window).height()
       $('img#picture').attr('src','${createLink(controller: 'image', action: 'resize')}?width='+width+'&height='+height)
   })
</g:javascript>
....
</body>

И некоторый код контроллера:

class ImageController {

  def resize = {
     def width = params.int('width')
     def height = params.int('height')
     // ... resize your image and return your image in the output stream
  }
}

Вышесказанное совершенно не в моей голове, поэтому вы должны заполнить пробелы: -)

Счастливого взлома.

0 голосов
/ 18 января 2011

тег createLink позволит передавать параметры при вызове действия контроллера.Пусть ваш javascript определит значения, а затем подключит их к скрытым переменным, на которые может ссылаться тег createLink.В jQuery есть несколько отличных опций для легкого доступа к элементам DOM.

Например, ваш элемент img может выглядеть так: <img src="${createLink(controller:'chart', action:'buildChart', params:\"['vpWidth' : document.getElementById(\'vpWidth\').value, 'vpHeight': document.getElementById(\'vpHeight\').value]\")}" />

Мы используем похожую технику для создания вызовов метода remoteFunction с Grails иJQuery.Возможно, вам придется настроить приведенный выше пример, он не проверен.

0 голосов
/ 14 декабря 2010

Используйте JavaScript, чтобы добавить скрытые поля формы, содержащие нужные вам числа. Из with в контроллере grails используйте request.getParameter ("fieldName"), чтобы получить значения в виде строки, затем преобразовать в int и выполнить изменение размера.

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