Вопрос

Я хотел бы разделить свои представления в Grails на 2 файла: файл .gsp и файл .js, чтобы получить более четкое разделение Javascript от моих представлений.Итак, вот пример:

views/index.gsp
views/index.js
views/home/index.jsp
views/home/index.js

Но когда я просто добавляю ссылку на скрипт index.js следующим образом:

<script src="index.js" type="text/javascript"></script>

все, что я получаю, это 404.

Кто-нибудь знает, как с этим справиться?

Большим преимуществом была бы возможность использовать данные представления внутри файла index.js для создания желаемого контента.

Матиас.

Это было полезно?

Решение

На самом деле вполне возможно использовать файл JS (или файл любого другого типа) в качестве GSP с вашего grails-app/views/ каталог.Единственное, что вам нужно сделать, это определить подходящее сопоставление URL-адресов для этих GSP, например:

"/javascript/home/index"(view:'/home/index.js')

С помощью этого сопоставления URL-адресов вы можете поместить свой JS-код в grails-app/views/home/index.js.gsp (обратите внимание на завершающий .gsp), и вы можете использовать любые теги Grails в своем исходном коде JS.Чтобы гарантировать, что ваш JS поставляется с правильным типом контента, вы можете разместить

<%@ page contentType="text/javascript"%>

в начале вашего GSP.

К сожалению, createLink тег не поддерживает перезапись ссылок на представления, но для создания этих ссылок должно быть легко написать собственный тег.

В любом случае имейте в виду, что это не окажет положительного влияния на производительность вашего приложения.Обычно лучше иметь статические файлы JS (а также использовать их в качестве статических ресурсов), передавая, например, динамические данные в качестве параметров в функции JS.Это также убережет вас от головной боли.кэширование и т. д.

Другие советы

Обновление 2:

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

Можно написать обработчик событий, который синхронизирует все файлы javascript под grails-app/views с целевой папкой web-app/js.

Поместите собственный код в $PROJECT/scripts/Events.groovy.В PackagingEnd является хорошей целью для вызова, поскольку он происходит сразу после web.xml генерируется.

eventPackagingEnd = {  ->
     // for each js file under grails-app/views move to web-app/js
}

Обновлять

Если вы хотите, чтобы файлы javascript просто «объединились» вместе, вы можете сделать это с помощью символических ссылок, например:

grails-app/views/view1/index.js -> webapp/js/view1/index.js

Насколько мне известно, невозможно заставить Grails напрямую обслуживать контент, находящийся за пределами веб-приложения.

В качестве альтернативы вы можете встроить JavaScript, но это может повлиять на производительность.


Файлы Javascript принадлежат web-app/js.

Затем вы можете ссылаться на них, используя <g:javascript src="index.js" />.

Идея хороша, но Grails имеет такую ​​структуру каталогов не просто так.Папка представлений предназначена для определенного типа артефакта (представлений).

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

Несмотря на то, что я не в восторге от хранения Javascript вместе с представлением, мне понравилась идея Роберта подключиться к процессу сборки с помощью событий сборки для копирования исходных кодов Javascript в нужный каталог!Если вы решите пойти по этому пути, вы можете также сжать исходники, пока вы на нем. ShrinkSafe популярная библиотека.

Я не думаю, что вам разрешен доступ к js внутри представлений/

если тебе нужно это сделать...вот в чем трюк

  1. создайте свой js и переименуйте его с помощью myjs.gsp (используйте "") iniside _myjs.gsp введите вы js
...запишите сюда свой js...
  1. внутри вас gsp (например:index.gsp, view.gsp и т.д.) введите этот тег, чтобы загрузить вас js

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top