Параметры Grails.pass из контроллера во внешний файл .js? - PullRequest
1 голос
/ 30 ноября 2010

У меня есть контроллер:

package plugin

class TestController {

def simply = {[name:new Date()]}
}

, как вы видите, я передаю param name

Страница моего просмотра:

<html>
<head>
<!-- <script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DFF">-->

<g:javascript>
    alert("${name}")
</g:javascript>
</head>
<body>
</body>
</html>

эта страница работает правильно - сновазагрузить я вижу окно предупреждения с текущей датой:)

но, когда

просмотреть страницу:

<html>
<head>
<script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DF">
</script>
</head>
<body>
</body>
</html>

и внешний файл simply.js:

alert("${name}")

я вижу пустое окно предупреждения.Итак, мой вопрос: как я могу передать params в файл external.js?

1 Ответ

4 голосов
/ 30 ноября 2010

Существует два этапа анализа представления, когда оно отображается пользователю.Состояние одно - сервер, выполняющий любой код, содержащийся на странице просмотра.В вашем случае

${name}

Превращается в текущую дату, поскольку это значение из контроллера.Это означает, что текст, отправляемый в браузер пользователей, содержит $ 3/2/2010 вместо $ {name}

. Второй этап, когда пользователь получает доступ к представлению, - это браузер, анализирующий HTML.HTML-код, отправляемый в браузер, зависит от того, что произошло на сервере.Поскольку в вашем примере JavaScript содержится в представлении, $ {name} заменяется текущей датой на сервере.Затем JavaScript, содержащий 3/3/2010, отправляется в браузер, поскольку $ {name} был заменен на 3/3/2010 на сервере.Это означает, что всплывающее окно будет содержать 3/3/2010.Если вы включаете внешние файлы JavaScript, они никогда не запускаются на первом этапе, поскольку браузер загружает их напрямую и не отправляет запрос на сервер.Это означает, что первый шаг никогда не выполняется, поэтому $ [name} не заменяется значением из вашего контроллера.Это то же поведение, что и при использовании тега

<script>

или

<g:javascript>

.Чтобы передать значения из представления в JavaScript, расположенный во внешнем файле, вы должны определить свой JavaScript как функции во внешних файлах, если вы хотите передать параметры.Например, в external.js

Function dispDate(theParam)
{
Alert(theParam);
}

Тогда, на ваш взгляд,

<g:javascript src="external.js" />
<script type="text/JavaScript">
dispDate(“${name}”);
 </script>

Где external.js хранится в каталоге web-app / js.

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