Существует два этапа анализа представления, когда оно отображается пользователю.Состояние одно - сервер, выполняющий любой код, содержащийся на странице просмотра.В вашем случае
${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.